春季@RequestBody和@ResponseBody注释
有人可以解释春季3中的注释吗?他们是干什么的?任何例子都会很棒。@RequestBody
@ResponseBody
有人可以解释春季3中的注释吗?他们是干什么的?任何例子都会很棒。@RequestBody
@ResponseBody
文档中有一个名为 16.3.3.4 的整个部分,使用@RequestBody注释映射请求正文。一个叫做16.3.3.5用@ResponseBody注释映射响应体。我建议您查阅这些部分。还相关:@RequestBody
javadocs,@ResponseBody
javadocs
用法示例如下所示:
使用像JQuery这样的JavaScript库,你会发布一个JSON对象,如下所示:
{ "firstName" : "Elmer", "lastName" : "Fudd" }
您的控制器方法将如下所示:
// controller
@ResponseBody @RequestMapping("/description")
public Description getDescription(@RequestBody UserStats stats){
return new Description(stats.getFirstName() + " " + stats.getLastname() + " hates wacky wabbits");
}
// domain / value objects
public class UserStats{
private String firstName;
private String lastName;
// + getters, setters
}
public class Description{
private String description;
// + getters, setters, constructor
}
现在,如果您的类路径上有Jackson(并且具有<mvc:annotation-driven>
设置),Spring会将传入的JSON转换为帖子正文中的UserStats对象(因为您添加了注释),并且它会将返回的对象序列化为JSON(因为您添加了注释)。因此,浏览器/客户端将看到以下 JSON 结果:@RequestBody
@ResponseBody
{ "description" : "Elmer Fudd hates wacky wabbits" }
请参阅我之前的答案,以获取完整的工作示例:https://stackoverflow.com/a/5908632/342852
注意:RequestBody / ResponseBody当然不仅限于JSON,两者都可以处理多种格式,包括纯文本和XML,但JSON可能是最常用的格式。
自Spring 4.x以来,您通常不会在方法级别上使用,而是在类级别上使用,具有相同的效果。@ResponseBody
@RestController
以下是官方Spring MVC文档的引用:
@RestController
是一个组合的注释,它本身是元注释的,并指示一个控制器,其每个方法都继承类型级注释,因此直接写入响应正文,而不是使用 HTML 模板进行视图解析和呈现。@Controller
@ResponseBody
@ResponseBody
@RequestBody:指示方法参数应绑定到 HTTP 请求正文的注释。
例如:
@RequestMapping(path = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body, Writer writer) throws IOException {
writer.write(body);
}
@ResponseBody注释可以放在方法上,并指示返回类型应直接写入HTTP响应正文(而不是放置在模型中,或解释为视图名称)。
例如:
@RequestMapping(path = "/something", method = RequestMethod.PUT)
public @ResponseBody String helloWorld() {
return "Hello World";
}
或者,我们可以使用@RestController注释来代替注释。这将消除使用 .@Controller
@ResponseBody