2016-09-20 3 views
0

@RequestBodyについて読んだり研究したりしていますが、私はまだその目的の周りに太い頭を包むことができません。シナリオを考える誰かが@RequestBodyを明確にしてもらえますか

  • RESTfulなAPIは、ユーザーからのみbookNameを取り、本のauthorNameを返します。
  • @RequestBody注釈はgetAuthorメソッドに追加され、bookNameをパラメータとしています。

私がsimilarで読んだことは、このシナリオでどのように適用されますか? ABに変換してからBAに変換すると、ユーザーはこれをJSONオブジェクトとして見ることができます。私は困惑している! javadocツールから

答えて

4

:メソッドのパラメータを示す

注釈は、Webリクエストのボディ にバインドする必要があります。要求の本文は、 HttpMessageConverterに渡され、要求のコンテンツタイプの に応じて、メソッド引数を解決します。オプションで、@ Validを使用して引数に注釈を付けることで、自動検証を に適用できます。

例では、@RequestBodyを使用しても意味がありません。あなたは著者名はあなたが/books/myBook/author

コントローラが応答が{"author":"whoever"}だろう

@RestController 
public class BooksRestController{ 

    @RequestMapping(value="/books/{bookName}/author", method=RequestMethod.GET) 
    public Map<String,String> getAuthor(@PathVariable bookName){ 
     ... 
     Map<String,String> author = new HashMap<String,String>(); 
     author.put("author",bookAuthor); 
     return author; 
    } 
} 

だろうがGET送るブック

に対応する取得したいです。

ここで、本を作成したいと考えています。これは、@RequestBodyを使用して、HTTP POST本体で送信されたJSONをBookオブジェクトに自動的に解析するときです。

要求: POST /books - ボディ{"name" : "SomeBook", "author":"SomeAuthor"}

コントローラー:

@RestController 
public class BooksRestController{ 

    @RequestMapping(value="/books", method=RequestMethod.POST) 
    @ResponseStatus(HttpStatus.CREATED) 
    public Book createBook(@RequestBody Book book){ 
     ... 
     //save book 
     book = bookService.save(book); 
     return book; 
     //Book is going to be serialized as JSON because of the implicit 
     //@ResponseBody annotation from @RestController 
    } 

Book.class:

public class Book{ 
    private String name; 
    private String author; 
    //getters setters; 
} 
+0

はそれがあった、あなたの説明をありがとうございましたはっきりと簡潔です。 あなたはそれを言った: "あなたは本を作成したいと思っています。それは@RequestBodyを使って、HTTP POST本体で送られたJSONをブックオブジェクトに自動的に解析するときです。 JSONオブジェクトに変換して戻してブラウザに表示するか、ユーザーに返しますか? – johnwick0831

+0

いいえ、これを実現するには、メソッドのreturnパラメータに '@ ResponseBody'を指定する必要があります。しかし、この例でわかるように、コントローラは '@ RestController'でアノテートされています。これは暗黙のうちにアノテーション(javadoc:'このアノテーションを持つ型は@RequestMappingメソッドがデフォルトで@ResponseBodyセマンティクスを取るコントローラとして扱われます)。代わりに '@ Controller'を使用していましたが、あなた自身でアノテーションを追加する必要があります。 – codependent

関連する問題