春天的要求获得者和响应人员注释
最后修改:2021年4月22日
1.介绍
在此快速教程中,我们提供了一个简明的春天概述@RequestBody.和@ResponseBody.注释。
进一步阅读:
Spring @Controller和@RestController注释
了解Spri金宝搏官网188beng MVC中@Controller和@RestController注释之间的差异。
阅读更多→
2。@RequestBody.
简单的说,这@RequestBody.注释地图映射httprequest正文到传输或域对象,启用自动反序列化入境httprequest身体到java对象上。
首先,让我们看看Spring Controller方法:
@postmapping(“/请求”)公共响应性PostController(@RequestBody LoginForm LoginForm){emailservice.fakeAuthenticate(loginform);return anderthentity.ok(httpstatus.ok);}
Spring自动将JSON DESERIALIATIALIACE TEAGAIN类型,假设指定了合适的Java类型。
默认,我们用诠释的类型@RequestBody.注释必须对应于我们的客户端控制器发送的JSON:
公共类LoginForm {私有字符串用户名;私有字符串密码;// ......}
在这里,我们用来代表的对象httprequest身体地图到我们的登录表格目的。
让我们使用curl测试这个:
curl -i \ -h“接受:application / json”\ -h“content-type:application / json”\ -x post --data“{”用户名“:”Johnny“,”密码“:”密码“}'“https:// localhost:8080 / ... /请求”
这就是我们需要一个Spring REST API和使用@的角度客户端所需的全部请求人员注解。
3.@ResponseBody.
这@ResponseBody.注释告诉一个控制器,返回的对象被自动序列化为json并传回httpresponse.目的。
假设我们有自定义回复目的:
公共类ResponseTransfer {私有字符串文本;//标准getters / setter}
接下来,可以实现相关的控制器:
@controller @requestmapping(“/ post”)公共类exampostcontroller {@autowired imagememice imageService;@postmapping(“/ response”)@ResponseByity Public ResponseTransfer PostrecenonSeController(@RequestBody LoginForm LoginForm){返回新响应权常规(“谢谢您发布!!!”);}}
在我们浏览器的开发人员控制台或使用邮递员等工具中,我们可以看到以下响应:
{“文字”:“谢谢你的发布!!!”}
请记住,我们不需要注释@ RESTCONTROLLER-带注释的控制器@ResponseBody.注解自从春天默认完成。
3.1。设置内容类型
当我们使用时@ResponseBody.注释,我们仍然能够明确设置我们的方法返回的内容类型。
为了那个原因,我们可以使用@requestmappping.s生产属性。请注意,注释@postmappping.那@getMappping.等义义为该参数定义别名。
现在让我们添加一个新的终端点发送JSON响应:
@postmapping(value =“/ content”,producate = mediatype.application_json_value)@ResponseBody Public ResponseTransfer PostresponseJsonContent(@RequestBody LoginForm LoginForm){返回新responseTransfer(“JSON内容!”);}
在该示例中,我们使用了mediatype.application_json_value.不变。或者,我们可以使用应用/ JSON.直接地。
接下来,让我们实现一种新方法,映射到同一个/内容路径,但返回XML内容:
@postmapping(value =“/ content”,producate = mediatype.application_xml_value)@ResponseBody Public ResponseTransfer PostresponseXmlContent(@RequestBody LoginForm LoginForm){返回新responseTransfer(“XML内容!”);}
现在,取决于一个值接受在请求的标题中发送的参数,我们将获得不同的响应。
让我们在行动中看到这一点:
curl -i \ -h“接受:application / json”\ -h“content-type:application / json”\ -x post --data“{”用户名“:”Johnny“,”密码“:”密码“}'“https:// localhost:8080 /.../内容”
CURL命令返回JSON响应:
http / 1.1 200内容类型:应用程序/ JSON传输 - 编码:Chunked日期:THU,2月20日2月19:43:06 GMT {“TEXT”:“JSON内容!”}
现在,让我们改变接受范围:
curl -i \ -h“接受:application / xml”\ -h“content-type:application / json”\ -x post --data {“用户名”:“Johnny”,“密码”:“密码”}'“https:// localhost:8080 /.../内容”
预期,我们这次得到XML内容:
http / 1.1 200内容类型:应用程序/ XML传输 - 编码:Chunked日期:Thu,2月20日2月20日19:43:19 GMT XML内容! Text> OrkeTetransfer>
4。结论
我们为Spring应用程序构建了一个简单的角度客户端,演示了如何使用@RequestBody.和@ResponseBody.注释。
此外,我们展示了如何在使用时设置内容类型@ResponseBody.。
一如既往,代码样本可用在github上。