后端接收JsonObject并转换为实体类对象,以及复杂对象存⼊数据库的解决思
路
1. 问题描述
之前在SpringBoot中,Controller 层⼀直⽤实体类去接收Json字符串,这样的好处就是只要实体类的结构与Json的结构⼀⼀对应,就可以很⽅便的接收,不⽤再进⾏转换处理。
但是有时候采⽤这种⽅式接收的实体类不⽅便存⼊数据库,⽐如说下⾯这个实体类,含有List和 Map ,存⼊数据库中很不⽅便:
实体类: LongtermDispatchPlanConParamDTO
public class LongtermDispatchPlanConParamDTO {
private String schedulingplanName;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date maketime;
private String userName;
private List<StationParameter> stationParameterList;json转换对象
private Map<String,List<Constraintltem>> stationConstraintMap;
}
2. 解决思路
我的解决思路是这样的
1. 在上⾯类中,前三个属性定义为主键字段,另增⼀个字段存储从前端传过来的整个Json字符串(这⾥类型定义为CLOB,以免超出
varchar2 的 4000长度)
表 LONGTERM_DISPATCHPLAN_CON:
对应实体类:
public class LongtermDispatchplanConEntity implements Serializable {
private static final long serialVersionUID =1L;
@Id
private String schedulingplanName;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@Id
private Date maketime;
@Id
private String userName;
private String jsonString;
}
2. 写好操作上表的增删改查
3. Controller接收时⽤ cn.hutool.json.JSONObject 接收,然后将JSONObject 转化为结构⼀致的实体类对象
LongtermDispatchPlanConParamDTO ,构造 LongtermDispatchplanConEntity对象存⼊数据库
@PostMapping("/insertListbyDTOJson")
public void insertListbyDTOLongtermDispatchplanCon(@RequestBody JSONObject jsonParam){
// 将JSONObject 转换为对应的Bean对象
Class<LongtermDispatchPlanConParamDTO> clazzClass = LongtermDispatchPlanConParamDTO.class;
LongtermDispatchPlanConParamDTO dto = Bean(clazzClass);
//将JSONObject 以LongtermDispatchplanConEntity 中的 jsonString字符串形式存⼊数据库
LongtermDispatchplanConEntity ldpConEntity =new LongtermDispatchplanConEntity();
// 复制部分属性
// 赋值 jsonString
ldpConEntity.String());
// 存⼊数据库
longtermDispatchplanConDao.save(ldpConEntity);
log.info("longtermdispatchplancon insertListbyDTOJson success");
}
4. 在返回Json字符串时,前端传过来主键信息,从数据库去取出LongtermDispatchplanConEntity,然后 构造LongtermDispatchPlanConParamDTO,前端就可以正确接收了。
@PostMapping("/getByIds")
public LongtermDispatchPlanConParamDTO getByIdsLongtermDispatchplanCon(@RequestBody LongtermDispatchplanConParamsVO2 p){ LongtermDispatchplanConParamsVO lp =new LongtermDispatchplanConParamsVO();
// 根据 LongtermDispatchplanConParamsVO 从表中查询LongtermDispatchplanConEntity
List<LongtermDispatchplanConEntity> ldpConEntitys = longtermDispatchplanConDaoM.findByIds(lp);
if(ldpConEntitys !=null){
LongtermDispatchplanConEntity ldpConEntity = (0);
//获得json字符串
String jsonString = JsonString();
//利⽤ json字符串构造JSONObject对象
JSONObject jsonParam =new JSONObject(jsonString,false);
//转换为 LongtermDispatchPlanConParamDTO对象
Class<LongtermDispatchPlanConParamDTO> clazzClass = LongtermDispatchPlanConParamDTO.class;
LongtermDispatchPlanConParamDTO dto = Bean(clazzClass);
return dto;
}
else{
throw new DataException(200, p.toString()+"没有信息");
}
}
上⾯⽤的操作Json 的都是来⾃ Hutool的,真是很好的⼯具
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论