복붙노트

[SPRING] RepositoryRestResource-s와 일반 컨트롤러가 모두있는 Spring REST HATEOAS의 루트 요청 int에 대한 사용자 정의 응답

SPRING

RepositoryRestResource-s와 일반 컨트롤러가 모두있는 Spring REST HATEOAS의 루트 요청 int에 대한 사용자 정의 응답

두 개의 저장소가 있다고 가정 해 보겠습니다.

@RepositoryRestResource(collectionResourceRel = "person", path = "person")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> {
    List<Person> findByLastName(@Param("name") String name);
}

@RepositoryRestResource(collectionResourceRel = "person1", path = "person1")
public interface PersonRepository1 extends PagingAndSortingRepository<Person1, Long> {
    List<Person1> findByLastName(@Param("name") String name);
}

하나의 정규 컨트롤러 :

@Controller
public class HelloController {
    @RequestMapping("/hello")
    @ResponseBody
    public HttpEntity<Hello> hello(@RequestParam(value = "name", required = false, defaultValue = "World") String name) {
        Hello hello = new Hello(String.format("Hello, %s!", name));
        hello.add(linkTo(methodOn(HelloController.class).hello(name)).withSelfRel());
        return new ResponseEntity<>(hello, HttpStatus.OK);
    }
}

이제 http : // localhost : 8080 /에 대한 응답은 다음과 같습니다.

{
  "_links" : {
    "person" : {
      "href" : "http://localhost:8080/person{?page,size,sort}",
      "templated" : true
    },
    "person1" : {
      "href" : "http://localhost:8080/person1{?page,size,sort}",
      "templated" : true
    }
  }
}

하지만 나는 이런 식으로하고 싶어.

{
  "_links" : {
    "person" : {
      "href" : "http://localhost:8080/person{?page,size,sort}",
      "templated" : true
    },
    "person1" : {
      "href" : "http://localhost:8080/person1{?page,size,sort}",
      "templated" : true
    },
    "hello" : {
      "href" : "http://localhost:8080/hello?name=World"
    }
  }
}

해결법

  1. ==============================

    1.

    @Component
    public class HelloResourceProcessor implements ResourceProcessor<RepositoryLinksResource> {
    
        @Override
        public RepositoryLinksResource process(RepositoryLinksResource resource) {
            resource.add(ControllerLinkBuilder.linkTo(HelloController.class).withRel("hello"));
            return resource;
        }
    }
    

    ~에 근거하여

  2. ==============================

    2.Bean으로 등록 된 Person 자원에 대한 ResourceProcessory가 있어야합니다. https://stackoverflow.com/a/24660635/442773을 참조하십시오.

    Bean으로 등록 된 Person 자원에 대한 ResourceProcessory가 있어야합니다. https://stackoverflow.com/a/24660635/442773을 참조하십시오.

  3. from https://stackoverflow.com/questions/25783487/custom-response-for-root-request-int-the-spring-rest-hateoas-with-both-repositor by cc-by-sa and MIT license