来自 javadoc:
指示方法参数的注解应绑定到正文
的网络请求。请求的主体通过
HttpMessageConverter 解析方法参数取决于
请求的内容类型。可选地,自动验证可以是
通过使用 @Valid 注释参数来应用。
在您的示例中,使用@RequestBody 毫无意义。你要获取一本书对应的作者姓名
您发送 GET/books/myBook/author
控制器是
@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;
}
}
回复将是{"author":"whoever"}。
现在假设您要创建一本书。那时您将使用@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;
}