编辑 - 现在已经解决,错误发生在我的弹簧配置中。我错过了<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\"}";
}
}
这就是我的期望:
GET
以外的任何HTTP方法,我应该收到405 - Method not allowed
回复application/json
,我会收到406 Not Acceptable
回复。application/json
,我应该收到415 Unsupported Media Type
回复。这是实际结果:
405 - Method not allowed
。非常好。Accept
标头且text/xml
的请求时,我只会得到200 - OK
响应,并且响应的内容类型为text/xml
,即使该方法仅生成application/json
。text/xml
的请求时,我会收到200 - OK
回复。我可以补充一点,我在泽西岛实施了所有这些,结果都是正确的。
答案 0 :(得分:0)
对于Spring 3.2,行为与你所描述的一致,除了2,我得到405(方法不允许)而不是406.你能确认你使用哪个版本的Spring进行这些测试,如果可以升级到至少3.10+并再次确认这种行为。