Spring MVC 对 json数据的处理

来源:互联网 发布:淘宝卖龙瞎真的吗 编辑:程序博客网 时间:2024/04/29 06:35

一个困扰我很久的问题~~~~

首先,前台使用js获取了一个id数组, 想要将这个数组,通过JSON.stringify()转化为json字符串,并上传到后台。因为听说Spring MVC可以通过@RequestBody注解,将json数据转化为你想要的类型,如本问题就是直接转化为一个数组

js代码

虽然听说要加上ContentType:'application/json',后台才知道前台请求的数据类型为JSON
 function remove() {var items = $("#employee-datagrid").datagrid('getSelections');if(items.length == 0) {$.messager.alert('信息提示','请选择要选中的行!','info')return;} var employees = [];for(var i = 0; i < items.length; i ++)employees.push(items[i].id);  $.ajax({type:'post',data:JSON.stringify(employees),url:'${basePath}/employee/delete',/*headers: { 'Accept': 'application/json','Content-Type': 'application/json'     }, */    contentType:'application/json',success: function(data) {if(data=='true') {            $.messager.alert('信息提示','删除成功!','info')            $("#employee-datagrid").datagrid("reload")            }            else {            $.messager.alert('信息提示','哎哟, 产生了一些不可描述的错误!','info')            }        },        error: function(xhr, textStatus, statusText) {        $.messager.alert('信息提示','删除失败!' + xhr.status + " " + xhr.statusText,'info')        }});

后台

@PostMapping(value="/delete")@ResponseBodypublic String delete(@RequestBody List<String> employees) {if(employees == null) {return "false";}//log.info("要删除的ID如下:");employees.forEach(e -> {log.info(e);});//Long id = 0L;for(String employeeId : employees) {id = Long.parseLong(employeeId);service.delete(id);}return "true";}

然而并没有卵用~~~~报什么415错误

问题解决

查资料....
无意中在官方文档中,看到这个
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">    <property name="messageConverters">        <util:list id="beanList">            <ref bean="stringHttpMessageConverter"/>            <ref bean="marshallingHttpMessageConverter"/>        </util:list>    </property</bean><bean id="stringHttpMessageConverter"        class="org.springframework.http.converter.StringHttpMessageConverter"/><bean id="marshallingHttpMessageConverter"        class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">    <property name="marshaller" ref="castorMarshaller"/>    <property name="unmarshaller" ref="castorMarshaller"/></bean><bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller"/>
意思就是@RequestBody注解会根据请求头的contentType的数据类型来带用不同的转化器,好,那我就把这几个东西加上...
结果又报错..缺少.jackson...包,好,我加。这三个在struct2中可以找到


结果竟然真的的好了....
2017-03-11 15:43:15,436 INFO  [http-apr-8080-exec-18] web.EmployeeController (EmployeeController.java:93) - 要删除的ID如下:2017-03-11 15:43:15,437 INFO  [http-apr-8080-exec-18] web.EmployeeController (EmployeeController.java:94) - 322017-03-11 15:43:15,437 INFO  [http-apr-8080-exec-18] web.EmployeeController (EmployeeController.java:94) - 34

问题分析

可能事情到此就结束了。。。
后来为了,截那个出错的图,就是报415,我把配置文件的那个messageConverter给删了,我就是想截个图让大伙看看,结果发现竟然不报错了,数据仍能够被成功删除...
我擦,这不是玩我吗?又行了~~~
运行结果仍正确的瞬间我是懵逼的....不过还好,不知怎么的突然想到。。我可是比原先多导入了三个jar包...
说白了,我的遇到的这个问题就是,对json处理的包没有导入????

JSON数据的发送

@ResponseBody,可以将后台的数据转化为json数据
简单测试如下:
@GetMapping("/greet")@ResponseBodypublic Department greet(String name) {System.out.println(name);Department depart = new Department();depart.setId(100);depart.setName(name);return depart;}
在浏览器地址栏输入 .... greet?name=小明
查看信息如下

好的成功。。


0 0
原创粉丝点击