@Configuration public class JacksonConfiguration {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
// Create a module for custom serialization
SimpleModule module = new SimpleModule();
module.addSerializer(Double.class, ToStringSerializer.instance);
objectMapper.registerModule(module);
return objectMapper;
}
}
3条答案
按热度按时间zxlwwiss1#
最简单的解决方案可能是将其更改为Map<String,String>,并在您想要的位置进行转换。我知道你对布尔值没意见,但是在这里,对于所有的选项,回到基态,重新引入想要的选项,可能比排除单个选项更好。
5jdjgkvh2#
您可以使用注解@JsonDeserialize forJackson。
下面是一个示例模型类,它 Package 了payload Map<String,Object>字段和一个控制器类以及JSON反序列化类,并使用逻辑来完成您想要的内容:
控制器类别:
JsonDeserializer类:
这不是最漂亮的解决方案,这是我知道的唯一一个,我猜你需要扩展和修改一些类型化器类来满足所有的值类型,但至少这给了你一个如何为特定字段做它的坚实示例,我测试了这个,它工作。
然而,我建议你总是知道你将收到的值的类型,但我完全理解会有某些情况下,这可能不是这样。
我使用的测试json payload如下:
nbewdwxp3#
我不会为你的情况建议下面的细节。因为你只需要禁用“123.56”或类似的自动转换,但保持像它是为其他人。因为下面的属性对所有。
spring.Jackson.mapper.allow-coercion-of-scalars=false
我不认为他们是一个特定的配置在属性文件。如果有,也请让我知道。我能建议的是创建一个自定义配置,为ObjectMapper创建一个bean,并为序列化创建一个自定义模块,它可以做到不覆盖其他配置。
它可能看起来像:
或者你可以做一个简单的想法。只要把所有东西都当作String,然后通过解析手动转换。如果你只有几个字段,你可以使用这个想法。😄