我在Spring启动数据中使用MongoRepository并且它正常工作而没有实现我自己的控制器。但我想把"注册日期"在我新创建的对象中,默认实现不支持。我需要实现自己的自定义控制器,以在每个新对象中添加额外的字段。问题是当我实现自己的控制器时,HATEOAS停止工作。
存储库类:
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends MongoRepository<User, String> {
}
控制器类:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
UserRepository repository;
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<List<User>> getAll() {
List<User> list = repository.findAll();
return new ResponseEntity<>(list, HttpStatus.OK);
}
使用此自定义控制器的有效负载如下所示:
[
{
"id": "571de80ebdabf25dd6cdfb73",
"username": "mark",
"password": "mark123",
"email": "mark@gmail.com",
"createdAt": "2016-04-25 11:49"
},
{
...
没有我的自定义控制器的有效负载如下所示:
{
"_embedded": {
"users": [
{
"username": "mark",
"password": "mark123",
"email": "mark@gmail.com",
"createdAt": "2016-04-25 11:49",
"_links": {
"self": {
"href": "http://localhost:8080/users/571de80ebdabf25dd6cdfb73"
},
"user": {
"href": "http://localhost:8080/users/571de80ebdabf25dd6cdfb73"
}
}
},
{
.....
我尝试使用@RepositoryRestController
代替@RestController
,但它没有帮助。我想知道是否有另一种方式可以注册&#34;注册日期&#34;在新创建的对象中没有实现自定义控制器?如果没有,我可以做什么HATEOAS再次工作?
答案 0 :(得分:0)
由于给我一个观点的评论,我解决了我的问题:)
1 - 带有ResourceSupport的扩展用户类。 (注意:不要只使用id
userId
,因为ResourceSupport需要getId()
方法。)
public class User extends ResourceSupport {
@Id
private String userId;
2 - 更新了我的控制器类,如下所示
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<List<User>> getAll() {
List<User> list = repository.findAll();
for(User user : list) {
Link self = linkTo(UserController.class).slash(user.getUserId()).withSelfRel();
Link users = linkTo(UserController.class).slash(user.getId()).withRel("users");
user.add(self);
user.add(users);
}
return new ResponseEntity<>(list, HttpStatus.OK);
}
现在,我的有效负载看起来像这样:
[
{
"userId": "571e44ecbdab7b1ffc668f02",
"username": "newton",
"password": "gravity",
"email": "nevton@gmail.com",
"createdAt": "2016-04-25 18:
"links": [
{
"rel": "self",
"href": "http://localhost:8080/users/571e44ecbdab7b1ffc668f02"
},
{
"rel": "users",
"href": "http://localhost:8080/users"
}
]
},
{
....