在邮递员中显示的JSON数据具有重复的数据列

时间:2019-06-22 06:59:01

标签: java json spring hibernate jpa

任何人都可以告诉我,我有一个RestController,它以ResponseBody的形式返回对象列表。
这些表是menusubmenu,它们与OneToMany映射。
因此,当控制器返回对象列表时,我不知道为什么它会显示SubMneu表的每一列以及菜单表列。

请检查下面的输出,并比较结果,即使子菜单具有不同的关联,您也会看到子菜单表中的每一列将附加到菜单的每一列。

控制器

@GetMapping("/load/menu")
    public ModelAndView oadMainMenu(/* @RequestParam(value = "role") String role */) {

          List<MenuLoaderDTO> dto= null;

          dto= service.getMenus();

          return dto;
    }

服务

// this is where I'm iteraring
@Override
    public List<MenuLoaderDTO> getMenus() {

        List<Menu> m= load.loadMenu();
        Set<SubMenuDto> l= new HashSet<SubMenuDto>();
        List<MenuLoaderDTO> lm= new ArrayList<MenuLoaderDTO>();

        m.forEach(e->{
            MenuLoaderDTO mld= new MenuLoaderDTO();
            mld.setMenu_id(e.getMenu_id());
            mld.setMenuName(e.getMenuName());
            mld.setRole(e.getRole());
            mld.setHref(e.getHref());
            Set<SubMenu> temp= e.getSubMenu();
            System.out.println(e.getMenuName());

            temp.forEach(f->{
                SubMenuDto smd= new SubMenuDto();
                smd.setSubMenu_id(f.getSubMenu_id());
                smd.setSubMneuName(f.getSubMneuName());
                smd.setRole(f.getRole());
                smd.setHref(f.getHref());
                l.add(smd);
                mld.setSubMenu(l);
                System.out.println(f.getSubMneuName());
            });
            lm.add(mld);
        });

        return lm;
    }

菜单

@Id
    @GenericGenerator(name = "gen", strategy = "increment")
    @GeneratedValue(generator = "gen")
    private int menu_id;
    private String menuName;
    private String href;
    private String role;
    @OneToMany(targetEntity = SubMenu.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER,mappedBy = "menu")
    private Set<SubMenu> subMenu;

subMenu

@Id
    @GenericGenerator(name = "gen", strategy = "increment")
    @GeneratedValue(generator = "gen")
    private int subMenu_id;
    private String subMneuName;
    private String role;
    private String href;
    @ManyToOne(targetEntity = Menu.class,cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinColumn(name = "menu_id",referencedColumnName = "menu_id")
    private Menu menu;

dao

@Autowired
    private SessionFactory factory;
    @Override
    public List<Menu> loadMenu() {

        Query query= null;
        query= getSession().createQuery("from Menu m");
        List<Menu> retriveMenu= null;

        try {
            retriveMenu = query.list();
        }catch (Exception e) {
            e.printStackTrace();
        }


        return retriveMenu;
    }

请通过下面的输出

PostMan

[
    {
        "menu_id": 1,
        "menuName": "Connection",
        "href": "null",
        "role": "ADMIN",
        "subMenu": [
            {
                "subMenu_id": 4,
                "subMneuName": "Modify Data",
                "role": "ADMIN",
                "href": "/odify/data",
                "menu": null
            },
            {
                "subMenu_id": 2,
                "subMneuName": "New Connection",
                "role": "ADMIN",
                "href": "/add/new",
                "menu": null
            },
            {
                "subMenu_id": 3,
                "subMneuName": "My Data",
                "role": "USER",
                "href": "/my/data",
                "menu": null
            },
            {
                "subMenu_id": 1,
                "subMneuName": "Dump Connection",
                "role": "ADMIN",
                "href": "/add/dump",
                "menu": null
            }
        ]
    },
    {
        "menu_id": 2,
        "menuName": "User Data",
        "href": "null",
        "role": "USER",
        "subMenu": [
            {
                "subMenu_id": 4,
                "subMneuName": "Modify Data",
                "role": "ADMIN",
                "href": "/odify/data",
                "menu": null
            },
            {
                "subMenu_id": 2,
                "subMneuName": "New Connection",
                "role": "ADMIN",
                "href": "/add/new",
                "menu": null
            },
            {
                "subMenu_id": 3,
                "subMneuName": "My Data",
                "role": "USER",
                "href": "/my/data",
                "menu": null
            },
            {
                "subMenu_id": 1,
                "subMneuName": "Dump Connection",
                "role": "ADMIN",
                "href": "/add/dump",
                "menu": null
            }
        ]
    }
]

控制台

Connection   --- main menu
Dump Connection  --- sub menu mapped to above
New Connection   ---- submenu mapped to above
User Data    ---- main menu
My Data      ----- submenu mapped to above main menu 
Modify Data  ----submenu mapped to above main menu 

在控制台中查看它如何不显示多余列的合并,但为什么在邮递员中却如此显示。
我要留下什么吗?

0 个答案:

没有答案