Spring MVC Request Mapping传递不应传递的请求

时间:2012-12-28 13:37:16

标签: java spring rest spring-mvc http-status-codes

编辑 - 现在已经解决,错误发生在我的弹簧配置中。我错过了<mvc:annotation-driven/>标签。添加时,一切都按预期工作。

我已经定义了一个使用Spring MVC的控制器,只有当请求的内容类型为HTTP GET时才应接受/controllertest对地址application/json的请求。它还返回application/json中的数据,因此只接受接受该格式数据的请求。但是,这不起作用。

这是使用Spring 3.2.0的代码:

package test.controllers;

import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/controllertest")
public class TestController {

    @RequestMapping(method = GET, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
    @ResponseBody
    public String helloJSON() {
        return "{\"message\":\"HelloWorld\"}";  
    }

}

这就是我的期望:

  1. 如果我使用GET以外的任何HTTP方法,我应该收到405 - Method not allowed回复
  2. 如果我发送的请求不接受application/json,我会收到406 Not Acceptable回复。
  3. 如果我发送的请求的内容类型不是application/json,我应该收到415 Unsupported Media Type回复。
  4. 这是实际结果:

    1. 我确实得到了405 - Method not allowed。非常好。
    2. 当发送带有Accept标头且text/xml的请求时,我只会得到200 - OK响应,并且响应的内容类型为text/xml,即使该方法仅生成application/json
    3. 发送内容类型为text/xml的请求时,我会收到200 - OK回复。
    4. 我可以补充一点,我在泽西岛实施了所有这些,结果都是正确的。

1 个答案:

答案 0 :(得分:0)

对于Spring 3.2,行为与你所描述的一致,除了2,我得到405(方法不允许)而不是406.你能确认你使用哪个版本的Spring进行这些测试,如果可以升级到至少3.10+并再次确认这种行为。