前端给后端,后端多个类给一个类传递数据,后端多个具体类统一处理

目录

 

【不同实体给一个实体传值,用map做载体】

【后端多个具体类统一处理】

---【类转为map】

---【解析map的某个key】

【前端给后端传对象】

---【json转map】

方式一:Json类解析Json字符串

方式二:Json类的parseObject来解析json字符串

方式三:JSON类,指定解析类型,来解析JSON字符串(也可以转换为实体)

方式四:

---【json转实体】

【map 的object转实体】

【Map转Json字符串】


【不同实体给一个实体传值,用map做载体】

多个相似结构的类的属性值,调用一个统一的方法,作为参数传入,开始想想到要传递一个抽象的类,想到了泛型、反射。但是尝试过,泛型和反射,是实例化一个抽象的类,给这个类赋值。适用于

【后端多个具体类统一处理】

,例如:从excel统一导数据等操作。用泛型,更灵活。

所以想到了Map, 记得教程里说不知道数据的结构,就用map,此处,传入参数,如何用一个统一的数据接口表示?排除泛型,那么就是Map。
其实也可传递一个目标统一的类。作用等同于map。(讨论后想到的。)之前,传递的是自己,绕了一圈,决定传递之前就转为【

统一的目标类】。但是这个转化的过程在每次调用接口方法前都要做同样的事情,转为Map能节省代码,接口接收后针对性地针对某些key的value和目标类对应,代码量更好,更灵活。

当然饶了一圈,也理解了各种知识的应用场景,顺便理解了一些应用的实现。


传入之前的类转化为 Map<String, Object>,传入后,取出某个Key,这和json解析相似,只是这里是解析map,预先知道数据中包含了某个key.


---【类转为map】

Map<String, Object> cond=new HashMap<String, Object>();

cond.put("jCategory", "ddd");

cond.put("yid", "2");

infoSyslogService.insertInfoSysLog("修改",cond);

传入后

---【解析map的某个key】

public void insertInfoSysLog(String className,Map<String, Object> variables) throws Exception {

String str = variables.get("yid").toString();

System.out.println("接口实现中---"+str);

}


另外:

【前端给后端传对象】

---【json转map】

        String str={"Result":"true","ErrorId":10000,"ErrorMsg":"",

             "Data":{"list":{"0215V146":{"price":"3.000","store":0},"0215X512":{"price":"14.000","store":20}}}}

方式一:
Json类解析Json字符串

Map maps = (Map) JSON.parse(str);

获取key=Data的Value

String value = maps.get("Data");

方式二:
Json类的parseObject来解析json字符串

Map maps= JSON.parseObject(str); 


方式三:
JSON类,指定解析类型,来解析JSON字符串(也可以转换为实体)

Map maps= JSON.parseObject(str,Map.class);


方式四:

1、Map maps = (Map) JSONObjec.parse(str);

2、Map maps= JSONObjec.parseObject(str); 

3、Map maps= JSONObjec.parseObject(str,Map.class);

---【json转实体】


JSON字符串:{"id":"12346","name":"测试"}
实体:public class Goods {private String id;private String name;getter and setter 省略}
注意:实体属性必须要严格对应JSON字符串里边的key!
private String id;

【map 的object转实体】

在用SpringBoot写controller的时候,需要接受一个map的Object,之后要把Object转为特定的类,需要通过json来作为中间介质:

  public boolean postArticle(@RequestBody Map<String, Object> map) throws IOException {

        ObjectMapper objectMapper = new ObjectMapper();
        String jsonInfo = objectMapper.writeValueAsString(map.get("articleInfo"));
        String jsonContent = objectMapper.writeValueAsString(map.get("articleContent"));
        ArticleInfo articleInfo = objectMapper.readValue(jsonInfo,ArticleInfo.class);
        ArticleContent articleContent = objectMapper.readValue(jsonContent,ArticleContent.class);

        System.out.println(articleContent + " " +articleInfo);
        return articleService.insertArticle(articleInfo,articleContent);
    }


【Map转Json字符串】

Map<String, Object> params = new HashMap<String, Object>();

params.put("pageSize", 100);

params.put("page", 1);

params.put("sn", 1119785570);

params.put("name", "sali");

String data = String.format("data=%s", JSONObject.toJSONString(params));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值