7

当我尝试使用 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-Not Acceptable)?

4

6 回答 6

6

You're sending an Accept= header instead of an Accept: header.

于 2012-07-11T09:42:42.983 回答
1

当我的请求中有错误的 Accept: 标头时,我得到了这个答案。我试图请求图像/jpeg,但我的请求包含“接受:应用程序/json”。

解决方案是使用正确的实体类来查询(我查询 Object 只是为了看看会发生什么),在我的例子中是 Resource.class。

于 2013-12-03T15:33:05.753 回答
0

将此添加到 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>
于 2014-08-27T13:06:35.587 回答
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)

对不起,这是科特林

于 2019-08-23T13:53:59.937 回答
0

就我而言,我不是在服务器端而是在客户端解决了这个问题。我正在使用 Postman 并收到 406 错误。但是使用浏览器可以很好地处理请求。于是我查看了浏览器中的请求标头,并在 Postman 中添加了 Accept 标头,如下所示:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

于 2016-04-27T22:07:09.113 回答
-1

我遇到了同样的问题,最后是图书馆问题。如果您不使用 maven,则必须确保已包含 json 核心库及其所有依赖项。如果您的方法以 json 格式加载了输入参数,而您没有此库,则会出现 415 错误。我认为这两个错误具有相同的起源:不完整的库。

于 2018-05-16T07:30:22.877 回答