与第三方平台合作中,经常会遇到API中定义首字母大写,最近刚好又又又碰到了,记录下~~
@RequestBody
虽然在返回值对象中将参数名首字母大写,但是API返回值中每个参数名还是小写!
原因:spring使用HttpMessageConverter将返回实体转换为json
解决方法:返回对象各个参数使用fasterxml的@JsonProperty
public class ResponseVo {
@JsonProperty(value = "Code")
private String code;
// 省略getter,setter
}
http请求 RestTemplate传参
项目中使用RestTemplate将消息推送到第三方平台,也是将传参首字母大写,但第三方返回参数异常!
原因:使用fastjson的JSONObject.toJSONString(vo)将参数名大写自动转换为小写了!
解决方法:传参对象各个参数使用fastjson的@JSONField
public class RequestVo {
@JSONField(name = "Code")
private String code;
// 省略getter,setter
}
RestTemplate调用伪代码如下:
//将对象转换为json字符串
String bodyJson = JSONObject.toJSONString(requestVo);
// 推送到处方审核平台
LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.put("Content-Type", Collections.singletonList("application/json;charset=UTF-8"));
headers.add("AppId", "lizzy");
HttpEntity<String> request = new HttpEntity<String>(bodyJson, headers);
ResponseEntity<String> retObj = restTemplate.postForEntity(pushUrl, request, String.class);
// {"Code": -1, "Msg": "111", "Data": {}}
JSONObject responseBody = JSONObject.parseObject(retObj.getBody());
// ...