Pourquoi RestTemplate OBTENIR de réponse en JSON quand doit-être en XML?

J'ai lutté avec un extrange printemps comportement à l'aide de RestTemplate (org.springframework.web.client.RestTemplate) sans succès.

- Je utiliser dans mon trou de demande de code ci-dessous et recevez toujours une réponse XML, qui, je l'analyser et d'évaluer ses résultats.

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

Mais ne peut pas comprendre pourquoi une réponse du serveur est au format JSON après l'exécution:

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

J'ai débogué au niveau de l'RestTemplate et le type de contenu est du XML, mais n'ai aucune idée pourquoi le résultat est en JSON.

Quand j'ai accès à partir d'un navigateur, la réponse est aussi dans le XML, mais dans apiResponse j'ai eu JSON.

J'ai essayé plusieurs options après la lecture de Printemps de la documentation
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/client/RestTemplate.html

Également essayé de modifier explicitement les en-têtes, mais ne peut toujours pas comprendre.

J'ai débogué RestTemplate classe et a remarqué que cette méthode est toujours d'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);
                }
            }
        }

Pourriez-vous nous donner une idée?

Si le navigateur que vous utilisez Firefox, le problème est l'en-tête accept, RestTemplate est de bas niveau et il suffit de faire une base, OBTENIR
RC est juste, besoin de regarder les en-têtes de requête de contenu et les types de réponses à ce chiffre. Veuillez fournir plus de contexte pour votre problème.
J'ai juste mis à jour le post avec de nouvelles informations. Semble que le allSupportedMediaTypes est toujours avec application/json. Si la modifier via le débogueur d'application/xml, il fonctionne. Pourquoi se produit-il? Au fait, comment puis-je faire pour utiliser l'application/xml par défaut?
la isse arrive parce que "allSupportedTypes" contient l'application/json et il est ajouté à setAccept. J'ai besoin de comprendre pourquoi json est définie et comment le changer. Merci beaucoup
voir cette réponse

OriginalL'auteur Federico Piazza | 2014-02-06