我在REST,Spring MVC中有以下代码。此代码应返回名为ResponseText的JSON类型数据结构:
@RequestMapping(value="/movieTheater", headers = {"ACCEPT=*/*"}, method=RequestMethod.GET)
public @ResponseBody ResponseText getCustomerInput(@RequestParam("name") String name, @RequestParam("price") Double price) {
Transaction transaction = new Transaction();
ResponseText result = new ResponseText();
transaction.setMovieName(name);
transaction.setTicketPrice(price);
transaction.setDatetime(new Date());
if(transactionService.addTransaction(transaction))
result.setMessage(ResponseStatus.SUCCESS.getStatus());
else
result.setMessage(ResponseStatus.FAILED.getStatus());
return result;
}
但是当我通过浏览器中的以下URL执行此代码时,我收到以下错误:
URL:
http://localhost:8080/SpringMVCMerchant/movieTheater.htm?name=Smurfs&price=300.00
错误:
HTTP Status 406 -
type Status report
message
description The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.
我无法确定我在这里做错了什么。我抬头看着网上解释这个错误,但仍然不知道我错过了什么。我已经给出了ACCEPT =“ / ”,它应该涵盖各种各样的回复,对吧? 请帮忙! 提前谢谢!
**当我添加标题
headers={"Accept: application/json, text/javascript"}
而不是上面的错误,我得到以下错误:
HTTP Status 405 - Request method 'GET' not supported
答案 0 :(得分:3)
我遇到了这个错误,当我删除了错误地添加到请求网址的.html
后缀时,这个错误得到了解决!
答案 1 :(得分:2)
尝试将“jackson”依赖项添加到您的pom.xml中(或者如果您不使用maven,则添加适当的jar)。
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.7.1</version>
</dependency>
如果没有此lib,您只能返回String或类似于String标准类型
答案 2 :(得分:1)
您应该通过@RequestMapping
注释的produces
属性定义可以生成的类型,而不是通过设置自定义标题。
@RequestMapping(value="/movieTheater", method=RequestMethod.GET, produces={"application/json","application/xml"})
public @ResponseBody ResponseText getCustomerInput(@RequestParam("name") String name, @RequestParam("price") Double price) {
// ...
}
请注意,您可能应该只在produces
属性中设置具体类型,说明实际可以生成哪些类型;除非你提供文件并做实际工作来确定MIME类型,否则声称生成任何东西实际上并不是那么有用。序列化为JSON和XML是非常常见的选项,但序列化为视频流是不太常见的,我们可以说吗?
您也需要适当的message converters。
答案 3 :(得分:1)
我有同样的问题,但我想出来了:
(1)删除
headers={"Accept: application/json, text/javascript"}
(2)将其添加到您的pom.xml中:
<!-- add jackson to support restful API, otherwise the API will return 406 error -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
(3)改变产生:
produces={"application/json"}
(4)如果你有
,删除content-negotiation-manager答案 4 :(得分:0)
您是否忘记在 ResponseText 中实施Serializable ?
答案 5 :(得分:0)
对我来说问题是我包含了上下文注释驱动:
<context:annotation-config/>
但忘了包含mvc注释驱动:
<mvc:annotation-driven/>
出于某种原因,在这种情况下,Spring返回406
而不是404
或相关。我不知道。