弹簧安置消耗导致HTTP状态406 - 不接受(Spring REST consumption r

2019-09-19 08:11发布

当我尝试消耗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 - 不接受)发生虽然映射器应注意映射到正确的类型?

Answer 1:

你发送Accept=头,而不是Accept:头。



Answer 2:

我得到这个答案时,我有一个错误的接受:在我的请求头。 我试图请求图像/ JPEG,但我请求包含“接受:应用/ JSON的”。

解决的办法是使用正确的实体类来查询(我被查询对象只是为了看看有什么会来),在我的情况Resource.class。



Answer 3:

内容添加到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>


Answer 4:

就我而言,我固定这不是在服务器端,但在客户端。 我用的是邮差,并得到406错误。 但是,使用的浏览器是处理请求就好了。 所以我看着在浏览器的请求报头和在邮差添加的Accept报头,例如: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8



Answer 5:

此外,您可以修复加“接受”,“/”

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)

对不起,这是科特林



Answer 6:

我有同样的问题,最终这是一个图书馆的问题。 如果你不使用Maven的,你必须确保你有包括JSON核心库及其所有依赖。 如果你的方法有JSON格式的加载输入参数,你没有这个库,你将有一个415错误。 我认为这两个错误有相同的起源:不完整的库。



文章来源: Spring REST consumption results in HTTP Status 406 - Not Acceptable