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

Spring @ResponseBody批注如何工作?

佴德曜
2023-03-14
问题内容

我有一种通过以下方式注释的方法:

/**
* Provide a list of all accounts.
*/
//  TODO 02: Complete this method.  Add annotations to respond
//  to GET /accounts and return a List<Account> to be converted.
//  Save your work and restart the server.  You should get JSON results when accessing 
//  http://localhost:8080/rest-ws/app/accounts
@RequestMapping(value="/orders", method=RequestMethod.GET)
public @ResponseBody List<Account> accountSummary() {
    return accountManager.getAllAccounts();
}

所以我知道这个注释:

@RequestMapping(value="/orders", method=RequestMethod.GET)

此方法处理对由URL / orders* 表示的资源发出的 GET HTTP请求。 *

此方法调用返回 List 的DAO对象。

其中 Account 代表系统上的用户,并具有代表该用户的某些字段,例如:

public class Account {

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long entityId;

    @Column(name = "NUMBER")
    private String number;

    @Column(name = "NAME")
    private String name;

    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name = "ACCOUNT_ID")
    private Set<Beneficiary> beneficiaries = new HashSet<Beneficiary>();

    ...............................
    ...............................
    ...............................
}

我的问题是: 批注 到底如何@ResponseBody工作?

它位于返回的List<Account>对象之前,因此我认为它引用了此List。课程文档指出,此注释可用于:

确保结果将通过HTTP消息转换器(而不是MVC视图)写入到HTTP响应中。

还要阅读Spring的官方文档:http :
//docs.spring.io/spring/docs/current/javadoc-
api/org/springframework/web/bind/annotation/ResponseBody.html

似乎它带了List<Account>物体并将它放入了Http Response。这是正确的还是我误会了?

写入前accountSummary()一种方法的注释中有:

访问http:// localhost:8080 / rest-ws / app /
accounts时,您应该获得JSON结果

那么这到底是什么意思呢?这是否意味着List<Account>accountSummary()方法返回的对象会自动转换为JSON格式,然后放入Http Response?中?或者是什么?

如果此断言为真,则在哪里指定对象将自动转换为JSON格式?@ResponseBody使用注释时是采用标准格式还是在其他地方指定?


问题答案:

首先,注释不进行注释List。就像方法一样,它对方法进行了注释RequestMapping。您的代码等同于

@RequestMapping(value="/orders", method=RequestMethod.GET)
@ResponseBody
public List<Account> accountSummary() {
    return accountManager.getAllAccounts();
}

现在注释的意思是方法的返回值将构成HTTP响应的主体。当然,HTTP响应不能包含Java对象。因此,此帐户列表将转换为适合REST应用程序的格式,通常为JSON或XML。

格式的选择取决于已安装的消息转换器,RequestMapping批注的produces属性的值以及客户端接受的内容类型(在HTTP请求标头中可用)。例如,如果请求说它接受XML,但不接受JSON,并且安装了可以将列表转换为XML的消息转换器,则将返回XML。



 类似资料:
  • 所以我知道通过这个注释: 此方法处理对URL/Orders表示的资源发出的GET HTTP请求。 此方法调用返回列表的DAO对象。 确保结果将由HTTP消息转换器(而不是MVC视图)写入HTTP响应。 也可以阅读Spring官方文档:http://docs.Spring.io/Spring/docs/current/javadoc-api/org/springframework/web/bind/

  • 问题内容: 有人可以在Spring 3中解释@RequestBody和@ResponseBody注释吗?他们是干什么的?任何例子都很好。 问题答案: 在文档中有一个名为16.3.3.4的完整章节,其中将请求主体与@RequestBody批注进行映射。还有一个叫做16.3.3.5的映射,它使用@ResponseBody注释映射响应主体。我建议你查阅这些部分。也相关:@RequestBodyjavad

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

  • 问题内容: 我需要从单例中获取原型类。我发现方法注入是可行的方法,但是我真的不知道如何使用spring @Lookup注释。 我是依赖注入的新手,我选择了注释配置,因此我想朝着这个方向继续。 我发现@Lookup注释是最近才添加的(https://spring.io/blog/2014/09/04/spring- framework-4-1-ga-is-here ),但是我找不到任何方法用它。 所

  • 问题内容: 我遇到了一个例子: 我很好奇如何获取集合,因为没有设置方法,而且它是私有的。 问题答案: Java允许上一个字段或方法的访问控制被关断(是的,有一个安全检查到第一通路)经由方法,其是反射框架(二者的一部分Field和从继承)。一旦发现并写入了该字段,其余的工作就变得很简单了。只是一个简单的编程问题。 分享

  • 有没有纯注解为Spring留档?我看到的90%的文档都是为xml实现编写的。 我正在尝试覆盖默认的JobLauncher以能够传递JobParameters,但我添加到下面代码中的任何JobLauncher函数都被忽略,而是运行默认的SimpleJobLauncher。 我想用4个不同的作业参数启动同一作业的4个并发实例。这些参数应该告诉读取器从哪个目录读取。 我可以使用@Value注释为目录传递