Я новичок в 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?