2

J'essaie de configurer un service Web Spring 3.1 mvc qui renvoie xml. J'ai une méthode qui retourne le xml comme une chaîne déjà appelée getxmlforparam(). Ci-dessous un extrait du code que j'ai jusqu'à présent qui renvoie toujours le bon contenu mais avec le mauvais type de contenu = text/html.Définition du type de réponse de type contenu dans le service Web Spring 3.1 mvc

Existe-t-il un moyen de définir le type de contenu autrement qu'avec les techniques RequestMapping produit et response.addHeader que j'ai essayé ci-dessous?

@Service 
@RequestMapping(value="endpointname") 
public class XmlRetriever { 

    //set up variables here 
    @RequestMapping(method = RequestMethod.GET, produces = "application/xml") 
    @ResponseBody 
    public String getXml(
    @RequestParam(value = "param1") final String param1, 
    /*final HttpServletResponse response*/){ 

    String result = null; 
    result = getxmlforparam(param1); 

    /*response.addHeader("Content-Type", "application/xml");*/ 
    return result; 
} 

Merci.

EDIT: solution en écrivant directement à l'objet de réponse par la suggestion de Miken ci-dessous:

@Service 
@RequestMapping(value="endpointname") 
public class XmlRetriever { 

    //set up variables here 
    @RequestMapping(method = RequestMethod.GET, produces = "application/xml") 
    @ResponseBody 
    public String getXml(
    @RequestParam(value = "param1") final String param1, 
    final HttpServletResponse response){ 

    String result = null; 
    result = getxmlforparam(param1); 

    response.setContentType("application/xml"); 
    try{ 
    PrintWriter writer = response.getWriter(); 
    writer.write(result); 
    } 
    catch(IOException ioex){ 
     log.error("IO Exception thrown when trying to write response", ioex.getMessage()); 
    } 
    } 
} 
+0

Une question à propos de votre solution: Est-ce que produit = "application/xml" est toujours nécessaire? –

Répondre

0

Vous devez soit enregistrer votre propre HttpMessageConvertor (il ne devrait pas utiliser un StringHttpMessageConverter, qui délivre en sortie text/plain, voir http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/http/converter/StringHttpMessageConverter.html), ou vous devez gérer vous-même la totalité de la demande. Ce dernier est probablement le plus facile, mais le moins Spring-MVC'ish. Vous venez de retourner null, et utilisez l'objet de réponse pour écrire le résultat. La méthode Spring-MVC consiste à implémenter le mappage de vos objets internes vers XML dans un HttpMessageConverter et à renvoyer votre objet interne avec @ResponseBody à partir de votre fonction de contrôleur MVC.

+0

Merci, j'ai réussi à le faire fonctionner en retournant la chaîne à travers l'objet de réponse que vous décrivez, montré ci-dessus. Je vais essayer de le faire en utilisant un convertisseur de messages aussi. – Ethan

Questions connexes