HttpServletRequest的接收形式,为什么不用json字符串的接收形式

有个问题,有人知道吗,在javaweb登录的时候,登录接口的用户名和密码很多是使用HttpServletRequest的接收形式,为什么不用json字符串的接收形式

@RequestMapping(value="/user" ,method=RequestMethod.POST)
@ResponseBody
public String login(@RequestBody String user){}

为什么基本上用的是下面这种方式

@RequestMapping(value="/user" ,method=RequestMethod.POST)
@ResponseBody
public String login(HttpServletRequest request){
    String username = request.getParameter("username");
    String password = request.getParameter("password");
}

采用什么方式接收参数,看参数的传递方式的。能从request中获取参数,是因为提交的是formdata参数类型。并不是所有的参数传递都能从request中获取。

注解@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上。

如有帮助,望【采纳】支持一下。

HttpServletRequest 可以取到项目路径, 可以进行前端get请求乱码处理 可以配置拦截器或许请求头等等信息
json只能传入想要数据