小编典典

Spring中的@RequestBody和@ResponseBody批注

java

有人可以在Spring 3中解释@RequestBody和@ResponseBody注释吗?他们是干什么的?任何例子都很好。


阅读 602

收藏
2020-03-09

共1个答案

小编典典

在文档中有一个名为16.3.3.4的完整章节,其中将请求主体与@RequestBody批注进行映射。还有一个叫做16.3.3.5的映射,它使用@ResponseBody注释映射响应主体。我建议你查阅这些部分。也相关:@RequestBodyjavadocs,@ResponseBodyjavadocs

使用示例如下所示:

使用像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(并进行了设置),Spring会将传入的JSON从帖子正文转换为UserStats对象(因为你添加了@RequestBody注释),并且会将返回的对象序列化为JSON(因为你添加了@ResponseBody注解)。因此,浏览器/客户端将看到以下JSON结果:

{ "description" : "Elmer Fudd hates wacky wabbits" }

有关完整的工作示例,请参见我的前一个答案:https : //stackoverflow.com/a/5908632/342852

注意:RequestBody / ResponseBody当然不限于JSON,两者都可以处理多种格式,包括纯文本和XML,但是JSON可能是最常用的格式。

更新资料
从Spring 4.x开始,通常不会@ResponseBody在方法级别使用,而是@RestController在类级别使用,具有相同的效果。

2020-03-09