1

编辑- 现在解决了,错误出现在我的弹簧配置中。我错过了<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. 如果我使用任何 HTTP 方法而不是GET我应该收到405 - Method not allowed响应
  2. 如果我发送不接受的请求,application/json我应该会收到406 Not Acceptable回复。
  3. 如果我发送的请求内容类型不是application/json我应该收到415 Unsupported Media Type响应。

这是实际结果:

  1. 我确实得到了一个405 - Method not allowed. 非常好。
  2. 当发送带有Accept标头的请求时,text/xml只有我得到一个200 - OK响应,并且响应的内容类型是text/xml即使该方法只产生application/json.
  3. 发送内容类型为的请求时,text/xml我得到了200 - OK响应。

我可以补充一点,我在泽西岛实现了所有这些,结果都是正确的。

4

1 回答 1

0

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

于 2012-12-28T20:05:27.187 回答