好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

springboot嵌套子类使用

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

实际Bean类

User类里含有Address类

?

1

2

3

4

5

6

7

8

9

10

11

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注解,调用查询子类数据。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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里进行子类显示

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

columns: [{

            checkbox : true

        }, {

            field: 'userId',

            title: '用户ID'

        }, {

            field: 'userName',

            title: '用户姓名'

        }, {

            field: 'userAddress',

            title: '地址',

            formatter : function(value,row, index){   //主要配置在这里

                return value.city;

            }

        }

        ]

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

解决办法如下:

注意:

?

1

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

   @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中方法如下

?

1

2

3

4

5

6

7

8

9

10

11

    @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方法中调用切面方法,切面不生效,无法进入切面。

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

?

1

@EnableAspectJAutoProxy (exposeProxy = true ))

?

1

2

3

4

5

6

7

8

9

10

11

12

13

    @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嵌套子类使用方式—前端与后台开发的注意事项的详细内容...

  阅读:17次