Spring MVC覆盖收到的内容类型

时间:2017-07-21 05:48:17

标签: java json spring spring-mvc

我正在开发一个Spring MVC应用程序并拥有一个我无法控制的客户端。此客户端正在POST JSON数据,但传输application/x-www-form-urlencoded标头。 Spring自然会信任这个头并尝试接收数据但不能因为它的JSON。有没有人有过覆盖Spring收到的标题的经验,或者只是指定确切的数据类型,无论标题是什么?

2 个答案:

答案 0 :(得分:2)

你可以做两件事;

  1. 更改客户端以发送Content-Type: application/json标题
  2. 编写一个位于Spring Controller顶部的Servlet过滤器或Spring Interceptor,并检查标头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()方法