RestTemplate发送FromData,避免接收对象的数据为空

1.问题背景:服务A使用RestTemplate发送数据到服务B的接口,B是使用实体类对象进行接收的,但是接收到的所有参数都为空,需要增加@RequestBody才有数据:

发送方A:

public <T> T post(String url, Object requestObject, Class<T> responseType) {

                RestTemplate restTemplate=new RestTemplate();

                return restTemplate.postForObject(url, requestObject, responseType);

}

接收方B:

@RequestMapping("/sendMsg")

public String sendMsg(CustomerServiceMsg c) {

        return "";//此时接收到的c的所有参数都为空

}

2.解决方案:

1. 接收方B的接口增加:@RequestBody 

@RequestMapping("/sendMsg")

public String sendMsg(@RequestBody CustomerServiceMsg c) {

        return "";

}

2.发送方A的接口改成如下:

public <T> T post(String url, Object obj, Class<T> responseType) {   

      //对中文格式数据进行处理   

    FormHttpMessageConverter fc= new FormHttpMessageConverter();   

    StringHttpMessageConverter stringConverter= new StringHttpMessageConverter(StandardCharsets.UTF_8);        List<HttpMessageConverter<?>> partConverters= new ArrayList<>(); 

    partConverters.add(stringConverter);   

    partConverters.add(new ResourceHttpMessageConverter());   

    fc.setPartConverters(partConverters);   

    restTemplate.getMessageConverters().addAll(Arrays.asList(fc, new MappingJackson2HttpMessageConverter()));   

    return (T) restTemplate.postForEntity(url, obj2Map(obj), responseType);

}


public MultiValueMap<String, Object> obj2Map(Object obj) {

    MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();

    Class clazz = obj.getClass();

    Field[] fields = clazz.getDeclaredFields();

    try {

            for (Field field : fields) {

                field.setAccessible(true);

                map.add(field.getName(), field.get(obj));

        }

    } catch (Exception e) {

    e.printStackTrace();

    }

    return map;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容