Spring Boot Controller: вернуть ресурс в том же стиле, что и PagingAndSortingRepository - PullRequest
0 голосов
/ 15 октября 2018

Я новичок в Spring Boot, поэтому простите меня, если это глупый вопрос.

В настоящее время я использую PagingAndSortingRepository для обслуживания ресурсов моего REST API.Но по некоторым соображениям безопасности мне нужно настроить результаты запросов GET.Для этого я реализую контроллер для методов.

Это контроллер:

@RestController
@RequestMapping("/dimensionAttributeValues")
public class DimensionAttributeValueController {

    @Autowired
    DimensionAttribueValueService dimensionAttribueValueService;

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public PageImpl<DimensionAttributeValue> getDimensionAttributeValues(Pageable pageable) {
        Authentication user = SecurityContextHolder.getContext().getAuthentication();

        List<DimensionAttributeValue> result = new ArrayList<>();

        if (user.getAuthorities().contains("ADMIN")) {
            result = dimensionAttribueValueService.getAllDimensionAttributeValue();
        } else {
            result = dimensionAttribueValueService.getUserDimensionAttributeValue(user.getName());
        }

        return new PageImpl<DimensionAttributeValue>(result, pageable, result.size());
    } 
}

Проблема в том, что контроллер не возвращает ресурсы в том же стиле, что и хранилище.

Результат выглядит примерно так:

{
   "content":[ {..}],
   "size":20,
   "totalElements":27,
   "totalPages":2   "number":0
}

Что мне нравится иметь:

{
  "_embedded" : {
    "dimensionAttributeValue" : [ {..}, ]
  },
  "_links" : {
    "first" : {
      "href" : "http://localhost:8080/dimensionAttributes?page=0&size=20"
    },
    "self" : {
      "href" : "http://localhost:8080/dimensionAttributes{?page,size,sort}",
      "templated" : true
    },
    "next" : {
      "href" : "http://localhost:8080/dimensionAttributes?page=1&size=20"
    },
    "last" : {
      "href" : "http://localhost:8080/dimensionAttributes?page=1&size=20"
    },
    "profile" : {
      "href" : "http://localhost:8080/profile/dimensionAttributes"
    },
    "search" : {
      "href" : "http://localhost:8080/dimensionAttributes/search"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 37,
    "totalPages" : 2,
    "number" : 0
  }
}

Спасибо за вашу помощь!


Этот вопрос, кажется, дублируется, благодаря @ Adi.

Могу ли я заставить собственный контроллер отражать форматирование сгенерированных классов Spring-Data-Rest / Spring-Hateoas?


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...