1

Wrapper クラスの代わりに方法を見つけようとしていますが、常に 406 Not Acceptable エラーが発生します。ネットで調べたり、いろいろな方法を試してみましたが解決しませんでした。

@RequestMapping(value = "/users/getlist", headers="Accept=application/xml, application/json", method=RequestMethod.POST)
public @ResponseBody List<Permission> getList(@RequestParam String userEmail) {         
    List<Permission> permissions = service.getPermissions(userEmail);

      return permissions;
}

MultiValueMap<String, String> userMap = new LinkedMultiValueMap<String, String>();
userMap.add("userEmail", email_address);

// Prepare acceptable media type
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_XML);

// Prepare header
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
HttpEntity<?> userEntity = new HttpEntity<Object>(userMap, headers);

List<Permission> permissions = restTemplate.postForObject("http://localhost:8080/users/getlist", userEntity, List.class);

私も試しました。

List<Permission> permissions = (List<Permission>) restTemplate.postForEntity("http://localhost:8080/users/getlist", userEntity, List.class);    

したがって、基本的には、getter と setter でラッパー クラスを使用すると機能します。しかし、多くのラッパー クラスを作成する必要があります。このように実装するアイデアはありますか?

解決:

httpエンティティにメディアタイプを追加しませんでした。

4

1 に答える 1

2

私は信じている

headers="Accept=application/xml, application/json"

Acceptヘッダーに実際に値が含まれている必要がありますapplication/xml, application/json。あなたの要求はそうではありません。

受け入れ可能なメディア タイプを 1 つ追加します。

List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_XML);

それは次のようなリクエストヘッダーになります

Accept: application/xml

@RequestMapping宣言されたものと一致しません。

代わりに、 を または のいずれかheadersに一致させたい場合は、次のようにします。application/xmlapplication/json

headers= {"Accept=application/xml", "Accept=application/json"}

またはさらに良い

produces = {"application/xml", "application/json"}
于 2014-04-28T22:25:46.090 に答える