我正在开发一个Spring MVC应用程序并拥有一个我无法控制的客户端。此客户端正在POST JSON数据,但传输application/x-www-form-urlencoded
标头。 Spring自然会信任这个头并尝试接收数据但不能因为它的JSON。有没有人有过覆盖Spring收到的标题的经验,或者只是指定确切的数据类型,无论标题是什么?
答案 0 :(得分:2)
你可以做两件事;
Content-Type:
application/json
标题Content-Type
。如果不是application/json
,则会将其更改为application/json
。答案 1 :(得分:0)
为什么不编写单独的控制器来处理application/x-www-form-urlencoded
个请求。如果请求是有效的JSON,那么您可以解析它并将其转发到适当的服务。
通过这种方式,您还可以处理将来获得相同类型请求但不是有效JSON的案例。
@RequestMapping(value = "/handleURLEncoded", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public @ResponseBody Object handleURLEncoded(HttpEntity<String> httpEntity) {
String json = httpEntity.getBody();
//now you have your request as a String
//you can manipulate it in any way
if(isJSONValid(json)) {
JSONObject jsonObj = new JSONObject(json);
//forward request or call service directly from here
//...
}
//other cases where it's not a valid JSON
}
注意:从this回复
复制的isJSONValid()
方法