我在Spring Data REST项目(Spring Boot v.1.5.6)中设置了 enum traslation :
spring.data.rest.enable-enum-translation=true
其中一个实体具有枚举设置属性。当我尝试修补此实体以增加集合中的枚举数量时 - 我发现了错误(!):
无法读取有效负载!嵌套异常是java.lang.IllegalStateException:只能用属性信息翻译枚举!
如果我使用相同数量的枚举(或更少)更新枚举集,则实体会正确更新。
无论如何,PUT正确更新枚举设置。
如果我关闭enum traslation,那么PATCH将按预期工作。
有人知道如何解决这个问题吗?这是一个错误吗?
代码
@Entity
public class User {
private String name;
@Enumerated(EnumType.STRING)
@CollectionTable(name = "roles", joinColumns = @JoinColumn(name = "user_id"))
@ElementCollection
private Set<Role> roles;
// other stuff
}
public enum Role {
ADMIN, USER, POWER_USER
}
资源/ rest-messages.properties
# Enums
io.github.cepr0.enumtranslatingissue.Role.ADMIN=Admin
io.github.cepr0.enumtranslatingissue.Role.USER=User
io.github.cepr0.enumtranslatingissue.Role.POWER_USER=Power user
错误演示
GET http://localhost:8080/api/users/1
{
"name": "user1",
"roles": [
"Admin",
"User"
],
"_links": {
"self": {
"href": "http://localhost:8080/api/users/1"
},
"user": {
"href": "http://localhost:8080/api/users/1"
}
}
}
PATCH http://localhost:8080/api/users/1
{
"roles": [
"Admin",
"User",
"Power user"
]
}
{
"cause": {
"cause": null,
"message": "Can only translate enum with property information!"
},
"message": "Could not read payload!; nested exception is java.lang.IllegalStateException: Can only translate enum with property information!"
}