我正在用Micronaut和Kotlin做实验。
我有一个Hibernate JPA连接,它工作得很好,然而,在为它创建REST API时,我想从列表序列化中排除一些属性。
因此,下面是我所做的:
域类:
@Entity
@JsonView
class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@NotNull
@JsonView(View1::class)
var id : Long? = null
@NotNull
@Column(unique = true, length = 64)
@JsonView(View1::class)
lateinit var email : String
@NotNull
@Column(length = 16)
@JsonView(View2::class)
lateinit var firstName : String
@NotNull
@Column(length = 16)
@JsonView(View2::class)
lateinit var lastName : String
@NotNull
@JsonView(View2::class)
lateinit var address : Address
}
@Embeddable
class Address {
@Column(length = 64)
lateinit var street : String
@Column(length = 32)
lateinit var city : String
@Column(length = 16)
lateinit var state : String
}View1和View2并不有趣,因为根据文档,它们实际上是空类。
现在,在控制器中,我执行如下操作:
@Get("/")
@Produces("application/json")
@JsonView(View1::class)
fun list() : List<User> {
return userRepository.findAll()
}然而,我希望得到一些合作,这是我得到的:
[
{
"id": 1,
"email": "john@doe.com",
"firstName": "John",
"lastName": "Doe",
"address": {
"street": "23, Madison Street",
"city": "Brooklyn",
"state": "NY"
}
}
]在application.yml中,应该正确设置json-view,如下所示:
jackson:
json-view:
enabled: true有什么线索吗?
发布于 2021-10-09 17:57:14
在遇到同样的问题之后,我最终偶然发现了这个直接使用ObjectMapper的答案:Jackson's @JsonView annotation does not work。
问题是jackson.mapper.default-view-inclusion属性的默认值为true。在application.yml中将其显式设置为false为我解决了这个问题。
jackson:
serializationInclusion: ALWAYS
json-view:
enabled: true
mapper:
default-view-inclusion: falsehttps://stackoverflow.com/questions/59236373
复制相似问题