2012-01-19 5 views
5

HttpServletResponse objectをスプリングコントローラのメソッドで取得すると、アプリケーションがHttp APIと疎結合したままになります。HttpServletResponseを使用せずにレスポンスコンテンツタイプを設定する

おかげで...

編集:実際に私が何をしたいメソッドに引数としてのHttpServletResponseオブジェクトを取得することなく、春はこのためにどのような方法を提供し、私のcontroller.DoesでHttpServletResponseオブジェクトのContentTypeをを設定することですコントローラの?

答えて

1

引数として渡します。

@RequestMapping(value="/test", method = RequestMethod.GET) 
public void test(HttpServletResponse response) { ... } 
+0

を参照してください。しかし、これは私がまた私の編集を参照してくださいwant.PleaseいないのHttp APIに私のコントローラをバインドします。 –

0

私はこれを処理するための最良の方法は、レスポンス・レンダリングするためにここにいるので、特定のView-Implementationを使用することだと思うが行われるべきです。

8

私は2つのオプションを見ることができます:例えば、あなたがしたいコンテンツタイプが静的である場合、あなたは@RequestMappingに追加することができ

@RequestMapping(value="...", produces="text/plain") 

HTTPリクエストが、しかし、そのAcceptヘッダ内の同じコンテンツタイプが含まれている場合にのみ動作します。 16.3.2.5 Producible Media Typesを参照してください。

また、ResponseEntityを使用してください。

@RequestMapping("/something") 
public ResponseEntity<String> handle() { 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    responseHeaders.setContentType(new MediaType("text", "plain")); 
    return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED); 
} 
MediaType

また例えば、定数として定義された一般的なMIMEタイプの一握りを有しますMediaType.TEXT_PLAIN

16.3.3.6 Using HttpEntity<?>

+0

'responseHeaders.setContentType(" text/plain ")という行です。 '上記のコードでは、' java.lang.String 'にorg.springframework.http.HttpHeadersのsetContentType(org.springframework.http.MediaType)を適用できません。だから、私は試しました: 'responseHeaders.setContentType(new MediaType(" text/plain "));'それはエラーを出します: 'java.lang.IllegalArgumentException:トークン" text/plain "のトークン文字 '/'が無効です。なにか提案を? –

+0

@brightness:悪いです。編集済みの回答を参照してください。 – skaffman

+0

skaffman:私はあなたの編集したコードを実行しました。エラーを出しています: 'java.lang.NoSuchMethodError:org.springframework.http.HttpHeaders.readOnlyHttpHeaders(Lorg/springframework/http/HttpHeaders;)Lorg/springframework/http/HttpHeaders; \t org.springframework.http.HttpEntity。 (HttpEntity.java:100) \t org.springframework.http.HttpEntity。 (HttpEntity.java:70) \t org.springframework.http.HttpEntity。 (HttpEntity.java:58) '。 –

関連する問題