我使用Spring Boot 1.5.3,Spring Data REST,HATEOAS。 我有一個簡單的實體模型:用Spring Data REST公開枚舉枚舉
@Entity
public class User extends AbstractEntity implements UserDetails {
private static final long serialVersionUID = 5745401123028683585L;
public static final PasswordEncoder PASSWORD_ENCODER = new BCryptPasswordEncoder();
@NotNull(message = "The name of the user cannot be blank")
@Column(nullable = false)
private String name;
/** CONTACT INFORMATION **/
private String landlinePhone;
private String mobilePhone;
@NotNull(message = "The username cannot be blank")
@Column(nullable = false, unique = true)
private String username;
@Email(message = "The email address is not valid")
private String email;
@JsonIgnore
private String password;
@Column(nullable = false)
private String timeZone = "Europe/Rome";
@JsonIgnore
private LocalDateTime lastPasswordResetDate;
@Column(nullable = false, columnDefinition = "BOOLEAN default true")
private boolean enabled = true;
@Type(type = "json")
@Column(columnDefinition = "json")
private Roles[] roles = new Roles[] {};
和我的枚舉角色是:
public enum Roles {
ROLE_ADMIN, ROLE_USER, ROLE_MANAGER, ROLE_TECH;
@JsonCreator
public static Roles create(String value) {
if (value == null) {
throw new IllegalArgumentException();
}
for (Roles v : values()) {
if (value.equals(v.toString())) {
return v;
}
}
throw new IllegalArgumentException();
}
}
我創建的角4.彈簧數據REST客戶端是偉大的,輕鬆地將庫回我模型HATEOAS兼容:
{
"_embedded": {
"users": [
{
"name": "Administrator",
"username": "admin",
"roles": [
"Amministratore"
],
"activeWorkSession": "",
"_links": {
"self": {
"href": "http://localhost:8080/api/v1/users/1"
},
"user": {
"href": "http://localhost:8080/api/v1/users/1{?projection}",
"templated": true
}
}
},
正如你所看到的,我還通過rest-messages.properties翻譯了我的枚舉值。大! 我的Angular頁面現在需要完整的角色列表(枚舉)。我有一些問題:
- 瞭解更好的方式爲服務器返回的角色列表
- 如何回報這份名單
我的第一個學嘗試是建立以一RepositoryRestController充分利用Spring Data REST提供的功能。
@RepositoryRestController
@RequestMapping(path = "/api/v1")
公共類UserController的{
@Autowired
private EntityLinks entityLinks;
@RequestMapping(method = RequestMethod.GET, path = "https://stackoverflow.com/users/roles", produces = "application/json")
public Resource<Roles> findRoles() {
Resource<Roles> resource = new Resource<>(Roles.ROLE_ADMIN);
return resource;
}
不幸的是,由於某種原因,調用此方法返回一個404錯誤。我調試和資源創建正確,所以我想這個問題是在JSON轉換的某個地方。
它的工作最終JSON響應。但是,這是最好的做法嗎? – drenda
在我看來,最好的方法是將你的角色從枚舉轉換爲實體。 – Cepr0
我明白了,但似乎過分。遵循這個想法,每個枚舉將成爲一個枚舉......所以我不會看到枚舉點。相反,我認爲枚舉在這些情況下非常有用。 – drenda