springboot嵌套子类使用方式—前端与后台开发的注意事项

作者:鲸鱼姐 时间:2023-09-16 12:37:22 

springboot嵌套子类使用

在实际项目里,我们会使用到一个User用户含有子类Address、这种嵌套子类在开发中会遇到很多问题,现在主要针对前台和后台的开发问题进行整理。

实际Bean类

User类里含有Address类

public class User {
    private int userId;
    private String userName;
    private Address userAddress;
}
public class Address 
{
    private int addressId;
    private String city;
//忽略get、set方法
}

UserMapper.java  对于一对一

使用@Result注解,调用查询子类数据。

public interface UserMapper
{
    //one to one 
    @Select("select * from user where userId = #{userId}")
    @Results({
        @Result(id=true,column="userId",property="userId"),
        @Result(column="userName",property="userName"),
@Result(column="userId",property="userAddress",one=@One(select="com.whale.mapper.AddressMapper.getAddressByUserId",fetchType= FetchType.EAGER))
})
public interface AddressMapper 
{
    @Select("select * from address where userId=#{userId}")
    public Address getAddressByUserId(int userId);
}

前台使用bootstrap-table进行解析显示

在formmater里进行子类显示

columns: [{
            checkbox : true
        }, {
            field: 'userId',
            title: '用户ID'
        }, {
            field: 'userName',
            title: '用户姓名'
        }, {
            field: 'userAddress',
            title: '地址',
            formatter : function(value,row, index){   //主要配置在这里
                return value.city;
            }
        }
        ]

后台Controller转换成Json会出现 $ref

解决办法如下:

注意:

String jsonSting=JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect);

结果中出现$ref,先把JSONObject转换成String,然后再转换回JSONObject

  @ResponseBody
    @RequestMapping("allUser")
    public String findALL(){     
        PageHelper.startPage(pageNumber,pageSize);
        List<User> userList= userService.findAll();
        PageInfo<User> page=new PageInfo<>(userList);
        //取出查询结果
        List<User> rows = page.getList();
        JSONObject result = new JSONObject();
 
        int total = (int) page.getTotal();
        result.put("total",total);
        result.put("rows",rows);
        String jsonSting=JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect);  //结果中出现$ref,先把JSONObject转换成String,然后再转换回JSONObject
        JSONObject json= JSON.parseObject(jsonSting);
        System.out.println(json.toJSONString());
}

注解在嵌套方法不生效问题

例如在service中方法如下

    @PermissionAop
    @Override
    public List<PoiPermission> getList() {
        List<PoiPermission> list = this.list();
        return list;
    }
    @Override
    public void test(){
        this.getList();
        System.out.println("");
    }

controller中调用test()方法,test方法中调用切面方法,切面不生效,无法进入切面。

使用如下方式可解决该问题(启动类上需要添加

@EnableAspectJAutoProxy(exposeProxy = true))
    @PermissionAop
    @Override
    public List<PoiPermission> getList() {
        List<PoiPermission> list = this.list();
        return list;
    }
 
    @Override
    public void test(){
        IPoiPermissionService service = (IPoiPermissionService) AopContext.currentProxy();
        service.getList();
        System.out.println("");
    }

其中IPoiPermissionService为该service类实现的接口。

来源:https://blog.csdn.net/zhaolulu916/article/details/103668023

标签:springboot,嵌套子类,前端,后台
0
投稿

猜你喜欢

  • c# Selenium爬取数据时防止webdriver封爬虫的方法

    2023-06-24 07:50:51
  • C#启动进程的几种常用方法

    2023-06-18 04:13:48
  • 使用IDEA创建servlet JavaWeb 应用及使用Tomcat本地部署的实现

    2023-09-11 06:04:09
  • 对Jpa中Entity关系映射中mappedBy的全面理解

    2023-07-25 03:48:39
  • Android自定义View之组合控件实现类似电商app顶部栏

    2023-07-26 22:14:10
  • java环境变量path和classpath的配置

    2023-08-31 01:09:04
  • SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法

    2023-07-25 07:09:08
  • Android Studio 多层级 Module 对 aar 引用问题解决方法

    2023-08-06 19:41:27
  • C++实现LeetCode(5.最长回文子串)

    2023-07-03 06:07:13
  • ios百度地图的使用(普通定位、反地理编码)

    2023-07-03 15:26:17
  • 一篇文章带你入门Java Script

    2023-09-12 06:09:24
  • Kotlin语言编程Regex正则表达式实例详解

    2023-06-22 02:06:29
  • Java操作pdf的工具类itext的处理方法

    2023-07-14 11:51:53
  • Flutter本地存储之基本的键值对存储详解

    2023-08-18 03:52:35
  • Java超详细讲解设计模式中的命令模式

    2023-07-26 15:23:11
  • Android Build类的详解及简单实例

    2023-07-02 21:12:45
  • 详解关于SpringBoot的外部化配置使用记录

    2023-08-10 03:54:54
  • Android 应用签名的两种方法

    2023-07-29 14:02:04
  • 5种Android数据存储方式汇总

    2023-08-06 06:49:04
  • mybatis-plus生成mapper扩展文件的方法

    2023-08-10 07:29:05
  • asp之家 软件编程 m.aspxhome.com