Как добавить ссылки на корневой ресурс в Spring Data REST?

Как открыть внешний ресурс (не управляемый через репозиторий) в корневом списке ресурсов Spring Data REST? Я определил контроллер по шаблону в Рестбаксы


person Stackee007    schedule 17.04.2014    source источник


Ответы (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
comment
как я могу сделать это для ссылки без контроллера? (в частности, я хочу добавить весенний выход из системы безопасности) - person xenoterracide; 17.09.2016
comment
@xenoterracide, возможно, с @RequestMapping("/logout") на контроллере, а затем с методом @RequestMapping(method = RequestMethod.POST) public logout(){ // do logout }. Что вы имеете в виду под неконтроллерной ссылкой? - person aycanadal; 19.11.2016
comment
@aycanadal Я вполне уверен, что в какой-то момент понял это, но у меня есть фильтр, на который мне нужно ссылаться, потому что весенняя безопасность - person xenoterracide; 19.11.2016
comment
В случае репозитория @RepositoryRestController или @BasePathAwareController он также пропустил точку входа HAL и не мог быть обнаружен, поэтому linkTo создается из корня (/). Есть ли какое-нибудь решение для этого? - person Grigory Kislin; 10.08.2018
comment
См. также миграцию на 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