我正在使用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": "[email protected]",
        "name": "myname",
        "phoneNumber": "1234-456",
        "surname": "mysurname",
        "userName": "username"
      }
    ]
  },
  "page": {
    "size": 20,
    "totalElements": 1,
    "totalPages": 1,
    "number": 0
  }
}


但是,如果单击self链接,则不会从我的自定义控制器处理响应,而是从@RepositoryRestController的原始SDR处理该响应。

有没有一种方法可以将自定义控制器配置为还包含处理模板的href?

最佳答案

http://localhost:8080/personshttp://localhost:8080/api/persons

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

关于java - 用于模板链接的Spring Data Rest覆盖 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30418974/

10-11 10:38