SpringBoot 的理解 -5

这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战

前言

吃饱饭才有力气写代码~

今天我们继续学习Spring 添加 REST 功能。

一.使用 HTTP 信息转换器

1.1 在响应体中返回资源状态

正常情况下,当处理方法返回Java对象,这个对象会放在模型中并在视图中渲染使用。但是如果处理方法使用了@ResponseBody,那表明HTTP信息转换器机制会发挥作用,并将返回的对象转换为客户端需要的任意格式。
例如:

@RequestMapping(value=“/{username}”,method = RequestMethod.GET,headers={"Accept=text/xml,application/json"})
public @ResponseBody Spitter getSpitter(@PathVariable String username){
    return spitterService.getSpitter(username);
}
复制代码

1.2 在请求体中接收资源状态

在RESTFul会话的另一端,客户端可能会以JSON、XML、或者其他内容格式给我们发送一个对象过来。如果需要控制器的处理方法以原始形式来接收数据并自行转换的话,这是很不方便的。
不过,就像@ResponseBody 注解可以把发送给客户端的数据进行转换一样,@RequestBody 也能够对客户端发过来的对象做相同的事情。
假如:客户端提交了一个PUT请求,在请求体中包含了JSON格式表述的Spitter对象数据,为了以Spitter对象来接受信息,只需要在处理方法的Spitter参数上使用@RequestBody注解:

@RequestMapping(value="/{username}",method=RequestMethod.PUT,headers = "Content-Type=application/json")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void updateSpitter(@PathVariable String username,@RequestBody Spitter spitter){
    spitterService.saveSpitter(spitter);
}
复制代码

当请求到达时,这个方法进行处理,但是抵达的信息是JSON格式,而这个方法要求的是Spitter对象,这种情况下,当请求的Content-Type 是 application/json,Jackson JSON 库必须包含在应用程序的类路径下时,此时就可以把JSON信息转换为Spitter对象。
@ResponseStatus(HttpStatus.NO_CONTENT)
这个注解说明发给客户端的HTTP响应只有204的状态码,也就是无内容(No Content);

到此为止我们已经编写了一些处理方法用于解决对资源的请求。明天接着学如何使用Spring的RestTemplate编写使用这些资源的客户端代码。
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享