在特定情况下,Jackson 为 Zalando 问题状态选择了错误的序列化器。它选择 EnumSerializer
而不是 StatusTypeSerializer
它应该。反序列化时,它确实需要正确的(这就是为什么我有下面的异常(exception))
可以使用 this project 重现该问题。只需运行 AccountResourceIntTest.testRegisterInvalidLogin
。它不会在较小的测试用例中发生,但在这个测试用例中可靠地发生。
如果有任何帮助的话,这是错误:
com.fasterxml.jackson.databind.JsonMappingException: Current token (VALUE_STRING) not numeric, can not use numeric value accessors at [Source: [B@2aa85cc4; line: 1, column: 10181] at [Source: [B@2aa85cc4; line: 1, column: 10180] (through reference chain: org.zalando.problem.DefaultProblem["status"]) Motivation for or Use Case
我不知道 Jackson 选择正确的序列化器的逻辑。但我知道使用了错误的序列化器。我的所有测试都没有发生这种情况。但是,每个约束验证错误都会失败。
有什么想法吗?
最佳答案
您没有将httpMessageConverters设置为restUserMockMvc。
添加这个解决了我的问题:
.setMessageConverters(httpMessageConverters)
关于java - Zalando RFC7807 为 Jackson Status 选择了错误的序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46428757/