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-受け入れられない)が発生するのですか?

4

6 に答える 6

6

Accept=ヘッダーの代わりにヘッダーを送信していますAccept:

于 2012-07-11T09:42:42.983 に答える
1

リクエストに間違ったAccept:ヘッダーがあると、この回答が得られました。image / jpegをリクエストしようとしましたが、リクエストに「Accept:application/json」が含まれていました。

解決策は、正しいエンティティクラスを使用してクエリを実行することでした(私は、何が起こるかを確認するためだけにObjectをクエリしていました)。私の場合はResource.classです。

于 2013-12-03T15:33:05.753 に答える
0

これをSpringMVCディスパッチャーに追加します。

<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

私の場合、これをサーバー側ではなくクライアント側で修正しました。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 に答える
0

さらに、add "Accept"、" / "を修正できます

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)

すみません、Kotlinです

于 2019-08-23T13:53:59.937 に答える
-1

私も同じ問題を抱えていましたが、最終的にはライブラリの問題でした。Mavenを使用しない場合は、jsonコアライブラリとそのすべての依存関係が含まれていることを確認する必要があります。メソッドにjson形式でロードされた入力パラメーターがあり、このライブラリがない場合は、415エラーが発生します。2つのエラーの原因は同じだと思います。不完全なライブラリです。

于 2018-05-16T07:30:22.877 に答える