zoukankan      html  css  js  c++  java
  • Spring MVC灵活控制返回json的值(自定义过滤字段)

    在使用spring MVC开发过程中,为了提高项目执行效率,所以在一些外键字段的实体中会注解”@ManyToOne(fetch = FetchType.LAZY)”以实现延迟加载的效果。

    但是,在使用ajax请求数据,当需要返回的序列化数据中包含延迟加载的属性时,会出现错误,延迟加载的属性无法进行序列化。在这个时候,我们需要暂时取消延迟加载,以取到所有需要的数据。

    可是,这样又会造成一堆垃圾数据的产生、序列化、传递至前台。

    所以需要在控制层进行数据过滤,只序列化需要的数据。

    具体过滤方法如下:

    String jsonString = "";
    ObjectMapper objectMapper = new ObjectMapper();
    //过滤懒加载属性
    objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
    //过滤后时间属性格式
    objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
                                   //设置需要保留的字段(id,memberId.name,orderId.serviceTime)
    objectMapper.setFilters(JsonFilterUtil.getFilterOut("id","memberId","name","orderId","serviceTime"));
    objectMapper.addMixIn(TourRecord.class,JsonFilterUtil.getObjectFilterMinIn());
    //需要过滤的外键类型
    objectMapper.addMixIn(Member.class,JsonFilterUtil.getObjectFilterMinIn());
    objectMapper.addMixIn(Order.class,JsonFilterUtil.getObjectFilterMinIn());
    try {
       //序列化数据
        jsonString = objectMapper.writeValueAsString(tourRecords);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    map.put("tourList", jsonString);

    要实现过滤json返回数据的方式有很多种,有兴趣的同学可以去看看

  • 相关阅读:
    记一次vue.js用 http.post 前端传json到后台用javabean接收的坑
    springboot1.5.x 测试sample
    sqlserver 查询表缺失索引
    Docker swarm上线的一些问题
    数据库日志文件压缩
    Docker 挂载
    单播广播和多播
    导入数据库表后某些字段的精度为0
    Source Qualifiter组件中Sql Query属性的脚本返回结果集的列数大于组件定义的数量
    distinct和order by冲突
  • 原文地址:https://www.cnblogs.com/meng-ma-blogs/p/7798315.html
Copyright © 2011-2022 走看看