首先,先看一下前端返回的数据格式。
后台在做处理的时候,试过的了网上的 其他方法 ,但是不知道什么原因不适用。
总之,我们先看一下最后这个接口写好之后的样子。
/**
* 移动一条类型
*/
@RequestMapping(value="movePolicyType")
@ResponseBody
public WebResponse movePolicyType(String sort) {
logger.info("data==========>"+sort);
try{
//方法2、使用JSONArray
JSONArray jsonArray = JSONArray.fromObject(sort);
for(int i=0;i<jsonArray.size();i++){
HPolicyTypeDictDto hPolicyTypeDictDto =(HPolicyTypeDictDto)JSONObject.toBean(JSONObject.fromObject(jsonArray.get(i)), HPolicyTypeDictDto.class);
HPolicyTypeDict hPolicyTypeDict = new HPolicyTypeDict();
hPolicyTypeDict.setId(hPolicyTypeDictDto.getId());
hPolicyTypeDict.setSort(hPolicyTypeDictDto.getIndex());
//更新排序
hPolicyTypeDictService.updateByPrimaryKeySelective(hPolicyTypeDict);
}
return WebResponse.resSuccess("移动成功", null);
}catch(Exception e){
logger.info("移动操作失败:"+e);
return WebResponse.resFail("移动失败",null);
}
}
可以了解到在接收这个入参的时候,只是用到了String格式去接收,然后在对这个字符串转换成JSON,然后JSON再转换成对象。这样与直接去获取json格式的数据是有区别的。
之前试过的方法,不适用问题大多就是反应在Required request body is missing....
代码里用到的是方法二,也是经过借鉴的,因为方法一用了本地会报错,hh,下面介绍一下JSON字符串格式转化为java对象的两种方法。
方法一:使用JSONObject
//方法1、使用JSONObject
JSONObject jsonObject=JSONObject.fromObject(sort);
HPolicyTypeDictDto hPolicyTypeDictDto = (HPolicyTypeDictDto)JSONObject.toBean(jsonObject, HPolicyTypeDictDto.class);
至于为什么用方法一本地会报错,可以给大家看一下,是因为前端传回来的数据格式问题,是因为返回来的数据是用 [ ] 包裹起来的,所以方法一不合适。
方法二:使用JSONArray
//使用JSONArray
JSONArray jsonArray = JSONArray.fromObject(sort);
//获得jsonArray的第1个元素
Object object=jsonArray.get(0);
JSONObject jsonObject=JSONObject.fromObject(object);
HPolicyTypeDictDto hPolicyTypeDictDto =(HPolicyTypeDictDto)JSONObject.toBean(jsonObject, HPolicyTypeDictDto.class);