Java – why should the resttemplate get response be XML in JSON?

I used resttemplate (org. Springframework. Web. Client. Resttemplate) to struggle with an additional spring behavior without success

I use and always receive XML responses in my hole application below the code, and I parse and evaluate the results

String apiResponse = getRestTemplate().postForObject(url,body,String.class);

However, it is not clear why the server response is in JSON format after execution:

String apiResponse = getRestTemplate().getForObject(url,String.class);

I debug in low-level resttemplate. The content type is XML, but I don't know why the result is in JSON

When I access from the browser, the response is also in XML format, but in apiresponse, I get JSON

I tried many options after reading the spring documentation http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/client/RestTemplate.html

He also tried to change the title clearly, but he still couldn't figure it out

I debugged the resttemplate class and noticed that this method always sets application / JSON:

public void doWithRequest(ClientHttpRequest request) throws IOException {
            if (responseType != null) {
                List<MediaType> allSupportedMediaTypes = new ArrayList<MediaType>();
                for (HttpMessageConverter<?> messageConverter : getMessageConverters()) {
                    if (messageConverter.canRead(responseType,null)) {
                        List<MediaType> supportedMediaTypes = messageConverter.getSupportedMediaTypes();
                        for (MediaType supportedMediaType : supportedMediaTypes) {
                            if (supportedMediaType.getCharSet() != null) {
                                supportedMediaType =
                                        new MediaType(supportedMediaType.getType(),supportedMediaType.getSubtype());
                            }
                            allSupportedMediaTypes.add(supportedMediaType);
                        }
                    }
                }
                if (!allSupportedMediaTypes.isEmpty()) {
                    MediaType.sortBySpecificity(allSupportedMediaTypes);
                    if (logger.isDebugEnabled()) {
                        logger.debug("Setting request Accept header to " + allSupportedMediaTypes);
                    }
                    request.getHeaders().setAccept(allSupportedMediaTypes);
                }
            }
        }

Can you come up with an idea?

Solution

I can solve my problem through RC Your help I will post answers to help others

The problem is that the accept header is automatically set to application / JSON, so I have to change the way I call the service to provide the accept header I want

I changed this:

String response = getRestTemplate().getForObject(url,String.class);

To do this, to make the application work:

// Set XML content type explicitly to force response in XML (If not spring gets response in JSON)
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_XML));
httpentity<String> entity = new httpentity<String>("parameters",headers);

ResponseEntity<String> response = getRestTemplate().exchange(url,HttpMethod.GET,entity,String.class);
String responseBody = response.getBody();
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>