【发布时间】:2021-04-13 08:27:38
【问题描述】:
我们编写了一个 Springboot Rest Service,它在内部使用 Jackson 对 Rest API 的 Json 输入/输出进行序列化/反序列化。
我们不希望 API 输入/输出的基元到/从 String 的类型转换。
我们已经禁用了字符串到基元的转换
spring.jackson.mapper.allow-coercion-of-scalars=false
但仍允许将 Primitive 转换为 String。
例如
"name": 123,
从 API 仍然反序列化为 "123",name 的 Java 数据类型在这里是 String。
我们已经浏览了 Spring Docs 的 Customize the Jackson ObjectMapper 部分,看起来这些枚举中没有任何可以使用的东西。
有没有办法在不编写自定义 ObjectMapper / Deserializer 的情况下实现这一点?
【问题讨论】:
-
看看我对这个问题的回答Restrict string data type to only string types for request body in Spring boot 2.4 (Jackson)。您需要注册自定义反序列化器,它会为标量值抛出异常。
-
@MichałZiober :您的解决方案有效,尽管稍作修改。
token.isBoolean() || token.isNumeric() || !token.toString().equalsIgnoreCase("VALUE_STRING")由于字符串本身是一个标量,因此您的解决方案原样不适用于任何标量类型,包括字符串。如果您可以发布您的评论作为答案,可以接受它作为解决方案。
标签: spring-boot jackson jackson-databind