当我尝试消耗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);
}
下面是该请求映射器的代码:
@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 - 不接受)发生虽然映射器应注意映射到正确的类型?
我得到这个答案时,我有一个错误的接受:在我的请求头。 我试图请求图像/ JPEG,但我请求包含“接受:应用/ JSON的”。
解决的办法是使用正确的实体类来查询(我被查询对象只是为了看看有什么会来),在我的情况Resource.class。
内容添加到Spring MVC的调度:
<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>
就我而言,我固定这不是在服务器端,但在客户端。 我用的是邮差,并得到406错误。 但是,使用的浏览器是处理请求就好了。 所以我看着在浏览器的请求报头和在邮差添加的Accept报头,例如: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
此外,您可以修复加“接受”,“/”
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)
对不起,这是科特林
我有同样的问题,最终这是一个图书馆的问题。 如果你不使用Maven的,你必须确保你有包括JSON核心库及其所有依赖。 如果你的方法有JSON格式的加载输入参数,你没有这个库,你将有一个415错误。 我认为这两个错误有相同的起源:不完整的库。