在Spring 3.1 mvc Web服务中设置响应的内容类型

时间:2012-11-08 17:58:28

标签: java web-services spring model-view-controller content-type

我正在尝试设置一个将返回xml的spring 3.1 mvc webservice。我有一个方法,它将xml作为一个名为getxmlforparam()的字符串返回。 下面是我到目前为止的代码片段,它始终返回正确的内容,但内容类型错误= text / html。

除了使用我在下面尝试过的RequestMapping generate和response.addHeader技术之外,有没有办法设置内容类型?

@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;
}

感谢。

编辑: 根据MikeN的建议直接写回答对象的解决方案:

@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());
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您应该注册自己的HttpMessageConvertor(它现在应该使用StringHttpMessageConverter,它输出text / plain,请参阅http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/http/converter/StringHttpMessageConverter.html),或者您应该自己处理整个请求。

后者可能是最简单的,但最少的是Spring-MVC' ish。您只需返回null,并使用响应对象来编写结果。

Spring-MVC方法是在HttpMessageConverter中实现从内部对象到XML的映射,并从MVC控制器函数返回内部对象和@ResponseBody。