2

xmlを返すSpring3.1MVCWebサービスをセットアップしようとしています。すでにgetxmlforparam()と呼ばれる文字列としてxmlを返すメソッドがあります。以下は、私がこれまでに持っているコードのスニペットです。これは常に正しいコンテンツを返しますが、content-type = text/htmlが間違っています。

以下で試したRequestMappingの生成と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());
    }
  }
}
4

1 に答える 1

0

独自のHttpMessageConvertorを登録する必要があります(text /plainを出力するStringHttpMessageConverterを使用する必要があります。http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/httpを参照してください)。 /converter/StringHttpMessageConverter.html)、またはリクエスト全体を自分で処理する必要があります。

後者はおそらく最も簡単ですが、Spring-MVC'ishは最も少ないです。nullを返し、応答オブジェクトを使用して結果を書き込みます。

Spring-MVCの方法は、内部オブジェクトからXMLへのマッピングをHttpMessageConverterに実装し、MVCコントローラー関数から@ResponseBodyと一緒に内部オブジェクトを返すことです。

于 2012-11-08T19:47:00.097 に答える