2015-02-20 3 views
4

Когда я использую контроллер по умолчанию для своих объектов, предоставляемый Spring Data Rest, все работает так, как должно. Результат выглядит следующим образом:Spring возвращает ресурс в чистом JSON не в формате HAL при включении весенних данных

{ 
    "_links" : { 
    "search" : { 
     "href" : "http://localhost:8080/users/search" 
    } 
    }, 
    "_embedded" : { 
    "users" : [ { 
     "firstName" : "Max", 
     "lastName" : "Mustermann", 
     "email" : "[email protected]", 
     "_links" : { 
     "self" : { 
      "href" : "http://localhost:8080/users/myadmin" 
     } 
     } 
    } ] 
    } 
} 

Но если я использую свой собственный контроллер вывода выглядит следующим образом:

[ { 
    "firstName" : "Max", 
    "lastName" : "Mustermann", 
    "email" : "[email protected]", 
    "links" : [ { 
    "rel" : "self", 
    "href" : "http://localhost:8080/user/myadmin" 
    } ] 
} ] 

Мой контроллер

@RestController 
@RequestMapping("/user") 
@EnableHypermediaSupport(type = {HypermediaType.HAL}) 
public class UserController { 

    @Autowired 
    UserRepository userRepository; 

    @RequestMapping(method=RequestMethod.GET) 
    public HttpEntity<List<User>> getUsers(){ 
     ArrayList<User> users = Lists.newArrayList(userRepository.findAll()); 
     for(User user : users){ 
      user.add(linkTo(methodOn(UserController.class).getUser(user.getUsername())).withSelfRel()); 
     } 
     return new ResponseEntity<List<User>>(users, HttpStatus.OK); 
    } 

    @RequestMapping(value="/{username}", method= RequestMethod.GET) 
    public HttpEntity<User> getUser(@PathVariable String username){ 
     User user = userRepository.findByUsername(username); 
     user.add(linkTo(methodOn(UserController.class).getUser(user.getUsername())).withSelfRel()); 
     return new ResponseEntity<User>(user, HttpStatus.OK); 
    } 
} 

Мой Пользователь:

@Entity 
@Table(name="users") 
public class User extends ResourceSupport{ 
    @Id 
    private String username; 

    private String firstName; 
    private String lastName; 

    @JsonIgnore 
    private boolean enabled; 

    @JsonIgnore 
    private String password; 

    @Column(unique = true) 
    private String email; 

    public User(){ 
     enabled = false; 
    } 
    //Getters and Setters 
} 

Если я удаляю зависимость от данных весны и включаю Spring-hateoas, spring-plugin-core и json-path (com.jayway.jsonpath), это сработает. Но я хочу использовать Spring-data-rest для некоторых других лица

Два вопроса:

  1. Почему не HAL по умолчанию с весенними данными отдохнуть включены?
  2. Как можно установить HAL в качестве выходного формата

ответ

2

Вы должны возвратить подтип ResourceSupport (обычно Resource или Resources), чтобы позволить HAL Джексон конвертер пинок.

Кроме того, @EnableHypermediaSupport имеет для использования в классе конфигурации JavaConfig, а не в контроллере.

+1

Привет, в примере, который я видел здесь: https://spring.io/guides/gs/rest-hateoas/ Пользователь должен расширить ResourceSupport. Это верно? Я добавил пользователя в свой пример. –

+1

Я до сих пор не понимаю, почему он работает :( –

+0

Я добавил наблюдение на '@ EnableHypermediaSupport'. –

Смежные вопросы