6

ヘッダー付きの GET リクエストを送信する必要があります: Content-Type: application/camiant-msr-v2.0+xml。サーバーからの XML 応答を期待しています。Postman でリクエストとレスポンスをテストしたところ、すべて問題ありませんでした。しかし、Spring でそれを実行しようとするとRestTemplate、常に 400 の悪い要求が返されます。の例外は次のspringとおりです。

Jul 09, 2016 12:53:38 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/smp] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException: 400 Bad Request] with root cause
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:641)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:597)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:475)

私のコード:

MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Content-Type", "application/camiant-msr-v2.0+xml");

HttpEntity<?> entity = new HttpEntity<Object>(headers);
log.debug("request headers: " + entity.getHeaders());
ResponseEntity<String> response = restTemplate.exchange(queryUrl, HttpMethod.GET, entity, String.class);

デバッグ メッセージにはヘッダーが として表示されますが{Content-Type=[application/camiant-msr-v2.0+xml]}、これは正しいようです。リクエストの何が問題なのか、ネットワーク上でデバッグするリクエストを確認する方法があるのだろうかと思います。

4

3 に答える 3

2

可能な解釈400は、コンテンツ タイプが要求に対して受け入れられないか、URL が一致しないことです。

私の個人的な経験から、あなたが台無しにしていると強く感じているので、ここで微調整するには、Spring のクラスqueryUrlを使用することをお勧めします。UriComponentsBuilder

UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
        .queryParam("data", data);

HttpEntity<?> entity = new HttpEntity<>(headers);

HttpEntity<String> response = restTemplate.exchange(
        builder.build().encode().toUri(), 
        HttpMethod.GET, 
        entity, 
        String.class);

それでもうまくいかない場合はお知らせください。

于 2016-07-09T22:55:53.693 に答える