JSON对象和JSON字符串、@RequestBody和@ResponseBody

首先明白前端两种数据格式的区别:

  • JSON对象是直接可以使用JQuery操作的格式,如C#中可以用对象(类名)点出属性(方法)一样
  • JSON字符串仅仅只是一个字符串,一个整体,不截取的话没办法取出其中存储的数据,不能直接使用,除非你只想alert()他;

JSON对象:{ name:"deluyi", sex: "man" }

JSON字符串:"{ 'name': 'deyuyi', 'sex': 'man' }"

 

@RequestBody主要用来接收前端传递给后端的JSON字符串中的数据的(请求体中的数据的);

GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。

在后端的同一个接收方法里,@RequestBody 与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。原因:@requestbody的含义就是在当前对象获取整个http请求的body里面的所有数据

注:  1.一个请求,只有一个RequestBody,但可以有多个RequestParam。2.用String 作为@RequestBody会将json字符串的值完全接下来而没有做映射;如果需要做属性的映射,应该创建一个实体类作为@RequestBody。

 如果ContentType设置成application/json,传入后台的话,那么后台必须要用@RequestBody才能接收到;一般的表单提交和JQuery、ajax表单提交,即content-type=application/x-www-form-urlencoded这种情况,后端要用@RequestParam()或@ModelAndView来接收,或省略即形参前什么也不写

 

总结:@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。但是,在一些特殊情况@requestBody也可以用来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种方式不是很常用,在处理这类请求的时候,@requestBody会将处理结果放到一个MultiValueMap<String,String>中,这种情况一般在特殊情况下才会使用,例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式。

详情可参考:https://blog.csdn.net/f45056231p/article/details/84972881

 

 

@ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。需要注意的是,在使用此注解之后不会再走视图解析器,而是直接将数据写入到输出流中,它的效果等同于通过response对象输出指定格式的数据。

  • 一般情况下,对于SpringMVC,通过请求路径映射到方法后,执行方法体,最后会返回Sting类型或者ModelAndView,然后会跳转到相应路径的jsp视图。(常用在后台管理系统或一些前后端不分离的项目中)
  • 如果在方法头,返回类型前注明@ResponseBody,则SpinrgMVC在执行完方法后不再会根据路径返回视图,而是返回一个封装了后端从数据库取得并业务化的数据和一些提示信息的JSON对象。(常用在前后端分离的项目中)前端拿到JSON对象后,再取出并显示数据,然后做相关的页面渲染和动画。
    @RequestMapping("/login")
   @ResponseBody
  public User login(User user){
    return user;
  }
  User字段:userName pwd
  那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'

  效果等同于如下代码:
  @RequestMapping("/login")
  public void login(User user, HttpServletResponse response){
    response.getWriter.write(JSONObject.fromObject(user).toString());
  }

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值