关于@RequestBody 、@ResponseBody、@RequestMapping、@RequestParam等的一点理解和整理
@RequestBody
接收的参数是来自requestBody中,即请求体。
一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,
比如:application/json、application/xml等类型的数据。就application/json类型的数据而言,
使用注解@RequestBody可以将body里面所有的json数据传到后端,后端再进行解析。
GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用
HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。
@ResponseBody
@ResponseBody的作用其实是将java对象转为json格式的数据。
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据或者文本字符串。
注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。比如response.getWriter().println("Login Success!");
本身@ResponseBody底层是通过response.getwriter()方法将数据写回前台的
@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】
@RequestMapping
@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一,在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,这也是在springmvc中用的最多的注解吧。
。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。
@RequestMapping(value="/login")或
@RequestMapping("/login")
如果method 不写的话,默认GET、POST都支持,根据前端方式自动适应
这点跟@GetMapping和@PostMapping有区别。
@GetMapping 用于将HTTP GET请求映射到特定处理程序方法的注释。
具体来说,@GetMapping是一个作为快捷方式的组合注释@RequestMapping(method = RequestMethod.GET)。
@PostMapping 用于将HTTP POST请求映射到特定处理程序方法的注释。
具体来说,@PostMapping是一个作为快捷方式的组合注释@RequestMapping(method = RequestMethod.POST)。
此外还有@PutMapping,@PatchMapping,@DeleteMapping同上
所以一般情况下都是用@RequestMapping(method=RequestMethod.)即可
@RequestParam
- 请求参数部分处理
@RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。
RequestParam可以接受简单类型的属性,也可以接受对象类型。
@RequestParam有三个配置参数:
1,required 表示是否必须,默认为 true,必须。
2,defaultValue 可设置请求参数的默认值。
3,value 为接收url的参数名(相当于key值)。
@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性,也可以接收application/json。@RequestParam也可用于其它类型的请求,例如:POST、DELETE等请求。
RequestParam有如下四种写法:
1,
public String logincheck2(@RequestParam(name = "username") String username, @RequestParam(name = "password") String password)
2,这种最简单,都不需要这个注解即可以获取到前端的值。
public String logincheck(String username,String password){}
3,
public String doLogin(@RequestParam(defaultValue="") String username, @RequestParam(defaultValue="") String password, @RequestParam(defaultValue="0") int userType, @RequestParam(defaultValue="") String verifyCode, HttpSession session)
4,
public String logincheck2(@RequestParam("username") String username, @RequestParam("password") String password)
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751769.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?