2012-03-15 12 views
3

RequestParamのように@RequestBodyアノテーションオプション(required = falseなど)を設定する方法はありますか?@RequestBody optional(例:required = false)

コードの主なパスはPOSTです。しかし、デバッグのためにブラウザの基本的なhttpリクエストを介して基本的なGETリクエストをサポートしたいと思います。しかし、私がそれをやろうとすると、415のサポートされていないメディアエラーが発生します。

答えて

6

コードの主なパスはPOSTです。しかし、私はこれを行うには、@RequestMapping注釈、例えばのmethod属性を使用

もブラウザ経由での基本的なGETリクエストをサポートしたいと思います

@RequestMapping(value="/myPath", method=RequestMethod.GET) 
public String doSomething() { 
    ... 
} 

@RequestMapping(value="/myPath", method=RequestMethod.POST) 
public String doSomething(@RequestBody payload) { 
    ... 
} 
+0

の最速の修正方法のスケジュールです。デフォルトの動作を変更するためにSpringに追加する必要のある設定を見つけることができませんでした。 Spring3.2を使用していて、GETリクエストを送信するとエラー415が発生しました。これはfastesソリューションです。 – tbraun

2

@RequestBody注釈オプションを作るための方法(例えば=偽必要)RequestParamがサポートするようにはありますか?要するに

、私は、そう を信じていませんが、入力ストリームから手動でそれを行うことができます。

@Autowired 
private MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter; 

RestResponse<String> updateViewingCard(@PathVariable(value = "custome") String customer, 
     @RequestParam(value = "p1", required = false) String p1, 
     @RequestParam(value = "p2", required = false) String p2, 
     // @RequestBody MyPayloadType payload,  Can't make this optional 
     HttpServletRequest request, 
     HttpServletResponse response) throws... { 

    MyPayloadType payload = null; 
    if (0 < request.getContentLength()) { 
      payload = this.mappingJacksonHttpMessageConverter.getObjectMapper().readValue(request.getInputStream(), 
        MyPayloadType.class); 
    } 
6

@RequestBodyが明らかになりました春3.2M1のようオプションとして設定することができます:https://jira.springsource.org/browse/SPR-9239

しかし、私はこれをSpring 3.2M2でテストし、nullを渡す代わりにrequired = falseを設定した後でもnullボディを送信する際に例外をスローしました。この問題は確認され、修正されました。3.2 RC1

関連する問題