Spring - Как правильно отображать данные о взаимоотношениях в представлении (таблице) с помощью REST api - PullRequest
0 голосов
/ 27 мая 2020

У меня есть сущность User (id, имя пользователя), которая имеет отношение многие-ко-многим с сущностью Roles (id, name). Я пытаюсь показать данные пользователя в ajax Datatable. Теперь, если у пользователя шесть ролей, он показывает шесть [объект Object] для всех шести ролей. Я не знаю, как правильно показать имя роли вместо объекта Object.

Вот что у меня:

.DataTable(
    {
    "pagingType" : "full_numbers",
    "sAjaxSource" : "/api/AppUser/all",
    "sAjaxDataProp" : "",
    "aoColumns" : [
    {
    "data" : "id"
    },
    {
    "data" : "username"
    },
    {
    "data" : "userenabled"
    },
    {
    "data" : "useremail"
    },
    {
    "data" : "userfirstname"
    },
    {
    "data" : "userlastname"
    },
    {
    "data" : "useraddress"
    },
    {
    "data" : "roles"
    }

Вот как это выглядит в таблице данных:

enter image description here

Вот мой REST Контроллер кусок:

@RestController
@RequestMapping("/api/AppUser")
public class AppUserRestAPIs {
    @GetMapping(value = "/all", produces = "application/json")
    public List<AppUser> getResource() {
        return appUserJPARepository.findAll();
    }
}

Я знаю, что это должно быть тривиально, но чувствую себя потерянным и не могу найти ни одного примера того, как представить данные о взаимоотношениях в поле зрения (html) с использованием REST api. Искал практически везде. Что мне здесь не хватает? Буду признателен за любые указатели здесь.

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Отвечая на свой вопрос:

Нашел! Здесь - https://editor.datatables.net/examples/advanced/joinArray.html

Итак, вместо:

{
    "data" : "roles"
}

я должен использовать:

{
      "data" : "roles",
      render : "[, ].name"
}

Все работало отлично, но теперь я я не знаю, что делать, если я не использую Datatable. Не уверен, что мне придется задать еще один вопрос.

0 голосов
/ 27 мая 2020

Использовать функцию для плоского списка ролей: вместо

{
    "data" : "roles"
}

Попробуйте следующее:

{
 "data": null,
  "render": function(data, type, row, meta) {
            var flatrole = '';
            //loop through all the roles to build output string
            for (var role in data.roles) {
               flatrole = flatrole + role.name + " ";
            }
            return flatrole;

          }
}
...