当前位置: 首页 > 面试题库 >

Spring中的@RequestBody和@ResponseBody批注

富凯旋
2023-03-14
问题内容

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


问题答案:

在文档中有一个名为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在类级别使用,具有相同的效果。



 类似资料:
  • 有人能解释一下Spring3中的和注释吗?它们是干什么用的?任何例子都很好。

  • 我必须实现的逻辑是记录所有的请求与主体服务到数据库。 据我所知,在Controller中,我们可以使用和。我可以在重用它们吗?

  • 我用一个简单的post和get方法编写了一个非常简单的控制器类。 今天是我第一次使用Postman-我不知道我做错了什么,但每次使用POST映射,我都会得到: 控制器类别: 我添加了一个< code>@RequestBody,但它仍然说它丢失了。 如何解决这个麻烦?

  • 问题内容: 我有一种通过以下方式注释的方法: 所以我知道这个注释: 此方法处理对由URL / orders* 表示的资源发出的 GET HTTP请求。 * 此方法调用返回 List 的DAO对象。 其中 Account 代表系统上的用户,并具有代表该用户的某些字段,例如: 我的问题是: 批注 到底如何工作? 它位于返回的对象之前,因此我认为它引用了此List。课程文档指出,此注释可用于: 确保结果

  • 我有一个带有conroller的Spring MVC web应用程序,如下所示: 在这一点上,一切都很好。我要做的是在列表转换为JSON之前,在控制器返回列表的地方拦截请求,并返回包含列表和搜索参数的映射。 现在,由于“不可变”控制器users ResponseBody,控制转到JacksonMessageConverter amd,响应从那里发出。我已经尝试了以下路径,但它们不起作用。 > 拦截

  • 为了映射请求体,我们可以在参数上使用@RequestBody注释,这将告诉Spring使用。 对于映射请求参数,我们可以使用@ModelAttribute注释(或者避免任何注释;效果相同),这将告诉Spring使用。 但是有没有一个简单的方法把这两者结合起来呢?有没有办法让spring首先用请求参数映射DTO,然后用从主体中的JSON反序列化的数据重写?