Spring 模板化的数据休息覆盖控制器 Link

Spring Data Rest override controller for Templated Link

我正在使用 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 link,响应将 不是 从我的自定义控制器处理,而是从原始 @RepositoryRestController SDR.

有没有一种方法可以将自定义控制器配置为也包含句柄模板化 href?

http://localhost:8080/persons 对比 http://localhost:8080/api/persons

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