用于模板化链接的Spring Data Rest覆盖控制器

时间:2015-05-24 00:38:57

标签: java spring rest spring-mvc spring-data-rest

我使用Spring Data REST将各种域对象公开为资源。

@Entity
class Person() {
    //fields
}

public interface PersonRepository implemets PagingAndSortingRepository<Person, Long> {

}

所以现在/persons将映射到存储库方法。

我想说我想覆盖GET方法。所以我这样做:

@RestController
@RequestMapping("/persons")
public class PersonController {

    private PersonRepository repository;

    @RequestMapping(method = RequestMethod.GET)
    public ResponseEntity<?> getAll(Pageable pageable, PagedResourcesAssembler<Person> assembler) {

        Page<Student> page = repository.findAll();
        return ResponseEntity.ok(assembler.toResource(page));

    }
}

好的,当我点击http://localhost:8080/persons时,正如预期的那样,它将由PersonController::getAll方法处理。

它将为我提供此JSON

{
  "_links": {
    "self": {
      "href": "http://localhost:8080/api/persons{?page,size,sort}",
      "templated": true
    }
  },
  "_embedded": {
    "persons": [
      {
        "active": true,
        "email": "mail@mail.com",
        "name": "myname",
        "phoneNumber": "1234-456",
        "surname": "mysurname",
        "userName": "username"
      }
    ]
  },
  "page": {
    "size": 20,
    "totalElements": 1,
    "totalPages": 1,
    "number": 0
  }
}

但是,如果我点击self链接,响应将 NOT 从我的自定义控制器处理,但来自@RepositoryRestController的原始SDR

有没有办法可以将自定义控制器配置为还包含句柄模板化的href?

1 个答案:

答案 0 :(得分:2)

http://localhost:8080/persons vs http://localhost:8080/api/persons

/api添加到您的控制器请求映射以覆盖SDR控制器