如何强制Feign使用指定content-type获取JSON格式响应
Feign强制返回JSON格式响应的三种可行方案
方案1:在Feign客户端接口/方法上显式声明
@Produces注解
直接在你的Feign客户端接口(或对应调用方法)上添加@Produces("application/json")注解,JAXRSContract处理时会优先采用客户端定义的Produces值,请求头的Accept会自动设置为application/json,覆盖默认读取的服务端全量Produces配置,服务端会优先返回JSON格式响应。
代码示例:@Produces("application/json") public interface RemoteUserService { // 接口方法定义 }方案2:全局注册Feign请求拦截器统一设置Accept头
如果你不想逐个修改Feign接口定义,可以自定义RequestInterceptor强制给所有Feign请求添加JSON格式的Accept头,该配置优先级最高,会覆盖默认自动生成的Accept头。
代码示例:public class JsonAcceptHeaderInterceptor implements RequestInterceptor { @Override public void apply(RequestTemplate template) { // 强制设置Accept为JSON格式,覆盖默认的xml+json组合 template.header("Accept", "application/json"); } }之后将该拦截器注册到你的Feign客户端配置中即可生效。
方案3:调用时动态指定Accept头
如果你需要灵活切换返回格式,可以在Feign接口方法的参数中添加@HeaderParam("Accept") String accept,调用时传入application/json即可指定本次请求返回JSON格式,传入text/xml即可返回XML格式。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

