我有一个方法,注释如下:
/**
* 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 /命令表示的资源发出的 走开 HTTP 请求。
此方法调用返回 名单的 DAO 对象。
其中 帐户表示系统上的一个用户,并且有一些字段表示这个用户,比如:
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 写入 HTTP 响应 消息转换器(代替 MVC 视图)。
还要阅读官方的 Spring 文档: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/ResponseBody.html
看起来它把 List<Account>
对象放到 Http Response
中。这是对的还是我误会了?
在之前的 accountSummary()
方法的注释中有:
访问时应该得到 JSON 结果 Http://localhost:8080/rest-ws/app/accounts
这到底是什么意思?这是否意味着 accountSummary()
方法返回的 List<Account>
对象被自动转换成 JSON
格式,然后放入 Http Response
?不然呢?
如果此断言为真,那么在哪里指定对象将自动转换为 JSON
格式?使用 @ResponseBody
注释时是否采用标准格式,或者是否在其他地方指定了标准格式?