编辑- 现在解决了,错误出现在我的弹簧配置中。我错过了<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\"}";
}
}
这是我所期望的:
- 如果我使用任何 HTTP 方法而不是
GET
我应该收到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
响应。
我可以补充一点,我在泽西岛实现了所有这些,结果都是正确的。