springboot嵌套子類使用方式—前端與后臺開發(fā)的注意事項
springboot嵌套子類使用
在實際項目里,我們會使用到一個User用戶含有子類Address、這種嵌套子類在開發(fā)中會遇到很多問題,現(xiàn)在主要針對前臺和后臺的開發(fā)問題進行整理。
實際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注解,調(diào)用查詢子類數(shù)據(jù)。
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轉(zhuǎn)換成Json會出現(xiàn) $ref
解決辦法如下:
注意:
String jsonSting=JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect);
結(jié)果中出現(xiàn)$ref,先把JSONObject轉(zhuǎn)換成String,然后再轉(zhuǎn)換回JSONObject
? @ResponseBody ? ? @RequestMapping("allUser") ? ? public String findALL(){ ? ?? ? ? ? ? PageHelper.startPage(pageNumber,pageSize); ? ? ? ? List<User> userList= userService.findAll(); ? ? ? ? PageInfo<User> page=new PageInfo<>(userList); ? ? ? ? //取出查詢結(jié)果 ? ? ? ? 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); ?//結(jié)果中出現(xiàn)$ref,先把JSONObject轉(zhuǎn)換成String,然后再轉(zhuǎn)換回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中調(diào)用test()方法,test方法中調(diào)用切面方法,切面不生效,無法進入切面。
使用如下方式可解決該問題(啟動類上需要添加
@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類實現(xiàn)的接口。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何從官網(wǎng)下載Hibernate jar包的方法示例
這篇文章主要介紹了如何從官網(wǎng)下載Hibernate jar包的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04idea中提示Class 'xxx' is never us
這篇文章主要介紹了idea中提示Class 'xxx' is never used的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01