最近遇到一个问题,一个添加接口,需要添加三个对象,而且这三个对象里面的属性名很多都是一样的。
本来是拿三个对象直接接收值,但是因为很多属性名都一样,所以接收不到值。
百度也有的说把这三个对象的参数重命名然后整成一个对象传过来,但是相对于实体类里相同参数偏多的话,就很麻烦。
最后解决办法如下:
例如:
具体方法如下:
借助fastjson工具类
package com.infohold.city.map.util; import java.util.Map; import com.alibaba.fastjson.JSON; public class JsonXMLUtils { public static String obj2json(Object obj) throws Exception { return JSON.toJSONString(obj); } public static <T> T json2obj(String jsonStr, Class<T> clazz) throws Exception { return JSON.parseObject(jsonStr, clazz); } public static <T> Map<String, Object> json2map(String jsonStr) throws Exception { return JSON.parseObject(jsonStr, Map.class); } public static <T> T map2obj(Map<?, ?> map, Class<T> clazz) throws Exception { return JSON.parseObject(JSON.toJSONString(map), clazz); } }
接下来controller层传值
/** * * 企业自查隐患--添加+修改 */ @RequestMapping(value = "insertcompanycheckhidden", method = {RequestMethod.POST,RequestMethod.GET}) @ResponseBody public RestResponse<Object> insertCompanyCheckHidden(@RequestBody Map<String, Object> models){ return wrap(companyCheckHiddenService.insertCompanyCheckHidden(models)); }
service代码如下
@Override public Object insertCompanyCheckHidden(Map<String, Object> models) { CompanyCheckHidden companyCheckhidden = null; HiddenCheckCompanyItem hiddenCheckCompanyitem = null; CompanyCheckHiddenScale companyCheckHiddenscale = null; try { companyCheckhidden = JsonXMLUtils.map2obj((Map<String, Object>)models.get("companyCheckhidden"),CompanyCheckHidden.class); hiddenCheckCompanyitem=JsonXMLUtils.map2obj((Map<String, Object>)models.get("hiddenCheckCompanyitem"),HiddenCheckCompanyItem.class); companyCheckHiddenscale=JsonXMLUtils.map2obj((Map<String, Object>)models.get("companyCheckHiddenscale"),CompanyCheckHiddenScale.class); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //其他逻辑。。。。。。。。。 return xxx; }
postman测试该添加接口:
{ "companyCheckhidden": { "id": "1", "name": "张三" }, "hiddenCheckCompanyitem": { "id": "2", "name":"李四" }, "companyCheckHiddenscale": { "id": "3", "name":"王五" } }