我已经对@RequestBody
进行了一些阅读和研究,但我仍然无法围绕它的目的包裹我的头脑。
鉴于情景:
bookName
并返回该书的authorName
。@RequestBody
方法添加了getAuthor
注释,该方法以bookName
为参数。从我在similar回答的问题中读到的内容,这在这种情况下如何应用?将A
转换为B
然后将B
转换为A
是什么意思,以便用户可以将其视为JSON对象。我很困惑!
答案 0 :(得分:4)
来自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;
}