在特定情况下,杰克逊为Zalando问题状态选择了错误的序列化程序。它会选择EnumSerializer
而不是StatusTypeSerializer
。反序列化时,它确实采用了正确的(这就是为什么我有下面的例外)
可以使用this project重现该问题。只需运行AccountResourceIntTest.testRegisterInvalidLogin
。它不会发生在较小的测试用例中,但在此测试用例中可靠。
如果有任何帮助,这是错误:
com.fasterxml.jackson.databind.JsonMappingException:当前令牌 (VALUE_STRING)不是数字,不能使用数值访问器 [来源:[B @ 2aa85cc4; line:1,专栏:10181]在[来源: [B @ 2aa85cc4; line:1,column:10180](通过参考链: org.zalando.problem.DefaultProblem [“status”])动机或使用 情况下
我不知道杰克逊选择合适的序列化器的逻辑。但我知道使用了错误的序列化程序。在我的所有测试中都不会发生这种情况。但是,每个约束验证错误都会失败。
有什么想法吗?
答案 0 :(得分:3)
您没有将 httpMessageConverters 设置为 restUserMockMvc 。
添加这个解决了我的问题:
.setMessageConverters(httpMessageConverters)