2016-09-06 1 views
3

私は現在、WebサービスアプリケーションにJavaとSpringを使用しています。 @ResponseBodyアノテーションと@RequestBodyアノテーションを使用する必要性を取り除くために、@RestControllerアノテーションを使用しています。残念ながら、@RequestBodyアノテーションを削除すると、シリアライズが失敗します。ここでSpring:私のクラスがRestControllerでまだ注釈が付けられているときにRequestBodyを使用するのはなぜですか?

はない私のメソッドのパラメータにリクエストボディをマップしない私のコードです:

@RestController 
@RequestMapping(value = "/member", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) 
public class MemberController { 
    @Autowired 
    private MemberService memberService; 

    @RequestMapping("/create") 
    public void create(Member member) { 
     memberService.create(member); 
    } 

    @RequestMapping("/read") 
    public Member read(Member member) { 
     return memberService.read(member); 
    } 

    @RequestMapping("/update") 
    public void update(Member member) { 
     memberService.update(member); 
    } 

    @RequestMapping("/delete") 
    public void delete(Member member) { 
     memberService.delete(member); 
    } 

    @RequestMapping("/retrieveById") 
    public Member retrieveById(Member member) { 
     return memberService.retrieveById(member); 
    } 

    @RequestMapping("/retrieveAll") 
    public List<Member> retrieveAll(Member member) { 
     return memberService.retrieveAll(); 
    } 
} 

は、私は本当に私はすでに@RestControllerを使用していたときに@RequestBodyアノテーションを使用する必要がありますか?

答えて

3

@RestControllerには@ResponseBodyが含まれていますので、これ以上否定しません。

しかし、依然としてPOSTリクエストに対して呼び出すメソッドには複数のパラメータが含まれている可能性があり、そのうちの1つはリクエスト本体にマップされるため、メソッドのその他のパラメータはPathVariablesまたはたとえばaです。@RequestBodyアノテーションが必要です。 UriComponentsBuilder。

リクエストボディにマップされるパラメータにマークを付けるには、アノテーションが必要です。

0

更新: はい、@RequestBodyが必要なのは、POSTを実行しているためです。あなたが取得するために変更する場合は、本当にそれを必要としません。 REST APIを実行しようとすると、HTTPステータスコードを使用するようにしてください。

情報を要求するためのGET。 情報を作成/更新するPOSTまたはPUT 情報を削除するためのDELETE。

documentationあなたは便宜上@ResponseBody

を書くためにそれを必要としない、代わりに@ResponseBodyですべての@RequestMappingのメソッドに注釈を付けるの、あなたが@RestControllerとあなたのコントローラクラスに注釈を付けることができます。によると、

@RestControllerは@ResponseBodyと@Controllerを組み合わせたステレオタイプの注釈です。それ以上に、それはあなたのコントローラにもっと意味を与え、フレームワークの将来のリリースでは追加のセマンティクスを持ちます。

あなたのクラスからMethod = RequestMethod.POSTを削除し、各メソッドに追加する必要があると思います。 retrieveAllメソッドは、POSTではなくGETでなければなりません。

関連する問題