Как открыть внешний ресурс (не управляемый через репозиторий) в корневом списке ресурсов Spring Data REST? Я определил контроллер по шаблону в Рестбаксы
Как добавить ссылки на корневой ресурс в Spring Data REST?
Ответы (2)
Это можно сделать, внедрив ResourceProcessor<RepositoryLinksResource>
.
Следующий фрагмент кода добавляет «/others» в корневой список
@Controller
@ExposesResourceFor(Other.class)
@RequestMapping("/others")
public class CustomRootController implements
ResourceProcessor<RepositoryLinksResource> {
@ResponseBody
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<Resources<Resource<Other>>> listEntities(
Pageable pageable) throws ResourceNotFoundException {
//... do what needs to be done
}
@Override
public RepositoryLinksResource process(RepositoryLinksResource resource) {
resource.add(ControllerLinkBuilder.linkTo(CustomRootController.class).withRel("others"));
return resource;
}
}
следует добавить
{
"rel": "others",
"href": "http://localhost:8080/api/others"
}
на ваши корневые ссылки
person
Stackee007
schedule
16.07.2014
как я могу сделать это для ссылки без контроллера? (в частности, я хочу добавить весенний выход из системы безопасности)
- person xenoterracide; 17.09.2016
@xenoterracide, возможно, с
@RequestMapping("/logout")
на контроллере, а затем с методом @RequestMapping(method = RequestMethod.POST) public logout(){ // do logout }
. Что вы имеете в виду под неконтроллерной ссылкой?
- person aycanadal; 19.11.2016
@aycanadal Я вполне уверен, что в какой-то момент понял это, но у меня есть фильтр, на который мне нужно ссылаться, потому что весенняя безопасность
- person xenoterracide; 19.11.2016
В случае репозитория
@RepositoryRestController
или @BasePathAwareController
он также пропустил точку входа HAL и не мог быть обнаружен, поэтому linkTo создается из корня (/). Есть ли какое-нибудь решение для этого?
- person Grigory Kislin; 10.08.2018
См. также миграцию на Spring HATEOAS 1.0: 0 м1">stackoverflow.com/questions/56118868/
- person Grigory Kislin; 27.02.2020
Я искал ответ на ту же проблему, но ключ в том, что у меня нет контроллера. Мой URL-адрес указывает на что-то, созданное в фильтре авторизации. Что сработало для меня, так это создать RootController
, у которого нет никаких методов, и использовать его для создания ссылок в реализации ResourceProcessor
.
@RestController
@RequestMapping("/")
public class RootController {}
Затем ссылка вставляется с использованием пустого контроллера.
@Component
public class AuthLinkProcessor implements ResourceProcessor<RepositoryLinksResource> {
@Override
public RepositoryLinksResource process(RepositoryLinksResource resource) {
resource.add(
linkTo(RootController.class)
.slash("auth/login")
.withRel("auth-login"));
return resource;
}
}
person
Ld00d
schedule
05.03.2018