在项目开始使用中前端如果使用jsonp请求后台请求没法使用@RequestBody 来接受参数对象问题发现了一个好用的json 包
<!- 引入以下包 -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
</dependency>
里面提供了将JSON 串转换成指定的javabean 对象的方法(但是注意,如果需要转换的对象中存在泛型,或者接口对象是无法转换的)
具体使用如下
classMap需要指定 需要转换的对象中非简单对象中对象是什么
public class ShippingOutInPortVO extends ShippingOutInPort {
private static final long serialVersionUID = -1740987828210144747L;
/**这里需要指定 persons 是什么对象的集合*/
private List<ShippingOutPortPersonVO> persons;
public List<ShippingOutPortPersonVO> getPersons() {
return persons;
}
public void setPersons(List<ShippingOutPortPersonVO> persons) {
this.persons = persons;
}
}
Map<String, Class> classMap = new HashMap<>();
classMap.put("images", FileModel.class);
classMap.put("persons", ShippingOutPortPersonVO.class);
ShippingOutInPortVO shippingOutPortVO = (ShippingOutInPortVO) BeanUtils.convertMapToBean(map, ShippingOutInPortVO.class,classMap);
/**
* 将map 中的data 属性转换成指定的对象类型
* @param map 前台参数
* @param clzss 需要转本的class
* @param classMap 内部包含class集合
* @return
*/
public static Object convertMapToBean(Map<String,Object> map,Class clzss,Map<String,Class> classMap){
String json = (String) map.get("data");
if(StringUtils.isEmpty(json)){
return null;
}
JSONObject d= JSONObject.fromObject(json);
return JSONObject.toBean(d, clzss,classMap);
}
特别需要注意的一点
JSONObject 不认识时间格式yyyy-MM-dd HH:mm:ss
需要在toBean 之前 加上
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));
以上就可以将json对象转换成 指定的javabean对象

227

被折叠的 条评论
为什么被折叠?



