ajax返回json对象转换成html,Ajax前台返回JSON数据后再Controller中直接转换成类型使用,后台接收json转成实体的方法...

之前写过一篇记录文章,写的是将一个比较复杂的数据结构在前台组合起来后传递到后台。

当时并不太了解@RequestBody,也并没有使用js提供的JSON.stringify()方法

所有都是自己写的,比如js将json转为字符串的方法,后台接收json转成实体的方法。

最近接触到了@RequestBody,于是想将之前的代码改写一下。

首先@RequestBody需要接的参数是一个string化的json,这里直接使用JSON.stringify(json)这个方法来转化

其次@RequestBody,从名称上来看也就是说要读取的数据在请求体里,所以要发post请求

第三,要设置contentType,contentType:"application/json,明确的告诉服务器发送的内容是json,而默认的contentType是application/x-www-form-urlencoded; charset=UTF-8

那么可以开始写出代码了:

$.ajax({

type: "post",

contentType:"application/json",

url: "repairs/saveDispatches",

data: JSON.stringify(dispatchesDTO),

success: function(data){

if(!data.success){

alertError("派工失败");

}else{

alertSuccess("派工成功");

}

})

后台怎么接呢?这就轮到@RequestBody出马了

@RequestMapping("/repairs/saveDispatches")

public void saveDispatches(@RequestBody DispatchesDTO dispatchesDTO,

HttpServletResponse response) throws IOException {

dispatchesService.saveDispatches(dispatchesDTO);

success(response);

}

很简单吧,无需手动进行json与实体的转换,只要能映射上去(也就是字段名和json的key相对应,value可以匹配上数据类型),那么就可以直接转换。

如何定义“能映射上去”呢?若是json中的key在实体中都能找到对应的field,那么就是“能映射上去”,也就是说:

前台传入的json中的key在实体中必须要存在,不然就会报错,比如下面这个前台传入的json中多了一个key为id的键值对

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "id" (Class com.westsoft.kft.repairs.dto.DispatchesDTO), not marked as ignorable

其实要使用@RequestBody这个注解还需要额外配置一个Bean,也就是自动帮我们接收json并转成对象的消息转换器messageConverter

由于我使用的是Spring3.1之后的版本,那么配置在RequestMappingHandlerAdapter下

class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">

class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">

当然也可以通过来简单的配置,这里就不过多介绍了~

最后再要提到几点

一、若1、前台发送请求时未指定contentType为json/application 2、Spring中未配置messageConverter

那么会报错误415,也就是类型不支持

前者是因为Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

而后者是因为Content type 'application/json;charset=UTF-8' not supported

二、由于Spring中使用的json转换用到的是jackson,所以需要引入jackson包

怎使用springmvc的@requestbody 返回json数据

先配置 XXX_ servletxml

再然后Action方法里注解就可以

@RequestMapping(value="/XXXXXX", method = RequestMethod.POST)

@ResponseBody

public 返回类型 XXXXXX(){

}

@responsebody一般在什情况下使用,他的好处与坏处?

@responsebody表示该方法的返回结果直接写入HTTP response body中

一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。

ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中

目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

View中选择的数据行中的部分数据传入到Controller中

将View中选择的数据行中的部分数据传入到Controller中   ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NE ...

通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

ajax获取动态列表数据后的分页问题

ajax获取动态列表数据后的分页问题 这是我在写前台网站时遇到的一个分页问题,由于数据是通过ajax的方式来请求得到的,如果引入相应的js文件来做分页,假如只是静态的填放数据到列表各项内容中(列表条数 ...

关于由ajax返回的数据在for循环中只能取到最后一个数的问题

关于由ajax返回的数据在for循环中只能取到最后一个数的问题 以上是来自后台的数据格式.从数据中可以看出,里面包含两个商品,每个商品价格分别为:1.98,13.60.这里我要计算两个商品的总价格,但 ...

在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了?

在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了? 在删除成功后,加上这句话就可以了:$("#dg").datagrid ...

iOS key value coding kvc在接收json数据与 model封装中的使用

iOS key value coding  kvc在接收json数据与 model封装中的使用 使用 kvc 能够极大的简化代码工作,及以后的接口维护工作: 1:先创建MovieModel类.h和 . ...

bootstrap通过ajax请求JSON数据后填充到模态框

1.   JSP页面中准备模态框

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值