OpenFeignClient用Object接收text/plain类型的返回报错

 

content-type text/plain  feign

 

处理部分服务返回Content-Type为text-plain的情况

有些服务例如微信在返回json字符串时的格式并不是application-json,而是text-plain。此时如果使用对象接收可能会报错。
如果报错解决办法有两个,一是直接用字符串接收然后手动反序列化;二是通过在配置类中配置Decoder来处理text-plain格式。下面为Decoder配置方法:

/**
 * 自定义新的decoder来处理微信返回text plain的返回类型
 * @return
 */@Bean
public Decoder feignDecoder(){
    ObjectFactory<HttpMessageConverters> messageConverters = new ObjectFactory<HttpMessageConverters>() {
        @Override
     public HttpMessageConverters getObject() throws BeansException {
            return new HttpMessageConverters(new MappingJackson2HttpMessageConverter(){
                @Override
                public void setSupportedMediaTypes(List<MediaType> supportedMediaTypes) {
                    List<MediaType> myType = new ArrayList<>(supportedMediaTypes);
                    myType.add(MediaType.TEXT_PLAIN);
                    super.setSupportedMediaTypes(myType);
                  }
            });
          }
    };
   return new SpringDecoder(messageConverters);
}

 

方案2:

 
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 
import java.util.ArrayList;
import java.util.List;
 
public class MyJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
    //fegin接收content-type:text/plain 返回体的解决方案
    public MyJackson2HttpMessageConverter(){
        List<MediaType> mediaTypes = new ArrayList<>();
        mediaTypes.add(MediaType.TEXT_PLAIN);
        setSupportedMediaTypes(mediaTypes);
    }

 

@Bean
    public RequirementClient requirementClient(){
        MyJackson2HttpMessageConverter converter =new MyJackson2HttpMessageConverter();
        ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(converter);
 
        return Feign.builder()
                .encoder(new JacksonEncoder())
                .decoder(new SpringDecoder(objectFactory))
                .requestInterceptor(new BasicAuthRequestInterceptor(userName, password, UTF_8))
                .target(RequirementClient.class, featureurl);
    }

 

https://blog.csdn.net/qq_39107335/article/details/128122780

https://segmentfault.com/a/1190000039427744?utm_source=tag-newest

 

posted @ 2023-02-13 10:01  沧海一滴  阅读(787)  评论(0编辑  收藏  举报