当我尝试使用REST API时出现此错误:
Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 406 Not Acceptable
这是执行的客户端代码:
public static void main(String[] args) {
Car c = getCarById(4);
System.out.println(c);
}
public static @ResponseBody Car getCarById(int id){
return new RestTemplate().getForObject("http://localhost:8080/rest/cars/{id}", Car.class, id);
}
以下是映射请求的Controller代码:
@RequestMapping(value="/cars/{id}", method=RequestMethod.GET, headers = {"Accept=text/html,application/xhtml+xml,application/xml"}, produces="application/xml")
public @ResponseBody Car getCarById(@PathVariable("id") int id){
return carService.getCarById(id);
}
为什么这个错误(406-Not Acceptable)会发生,尽管映射器应该处理映射到正确的类型?
答案 0 :(得分:1)
您正在发送Accept=
标头而不是Accept:
标头。
答案 1 :(得分:1)
当我的请求中出现错误的Accept:标题时,我得到了这个答案。我试图请求image / jpeg,但我的请求包含“Accept:application / json”。
解决方案是使用正确的实体类来查询(我正在查询Object以查看会发生什么),在我的案例中是Resource.class。
答案 2 :(得分:0)
将此添加到spring mvc dispatcher:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- JSON format support for Exception -->
<bean id="methodHandlerExceptionResolver"
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
答案 3 :(得分:0)
在我的情况下,我修复了这个问题,不是在服务器端,而是在客户端。我正在使用Postman并且收到406错误。但是使用浏览器处理请求就好了。所以我查看了浏览器中的请求标头,并在Postman中添加了Accept标头,如下所示:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
答案 4 :(得分:0)
此外,您可以修复添加“接受”,“ / ”
val headers = HttpHeaders()
headers.add("Accept", "*/*")
val httpEntity = HttpEntity("parameters", headers)
restTemplate.exchange(....)
restTemplate.exchange("http://localhost:" + serverPort + "/product/1",
HttpMethod.GET,
httpEntity,
String.javaClass)
对不起,是科特林
答案 5 :(得分:-1)
我遇到了同样的问题,最后这是一个库问题。如果您不使用maven,则必须确保包含json核心库及其所有依赖项。 如果您的方法具有以json格式加载的输入参数,并且您没有此库,则会出现415错误。 我认为这两个错误的起源相同:不完整的库。