杰克逊作家想念角色 例如:
因为你可以看到第一个"值"财产有一个"案例"属性而第二个属性不是
"value" :
{
"case" : 0.9992928025068476,
"unit" : 0.0012222687181184695,
"revenue" : 0.0019201603131782656,
"cost" : 4.066965790792624E-9,
"margin" : 0.0012176183516316138
},
"value" : {
"0.9999990.9999999964045203,
"unit" : 1.679374899388513E-7,
"revenue" : 1.7145802215154812E-7,
"cost" : 7.49609082287828E-18,
"margin" : 1.6790001622333746E-7
},
这怎么可能发生? 我的环境是多线程的,并且JSON文件的序列化是并行发生的。 ObjectReader& ObjectWriter是不可变的,因此它们是线程安全的,静态初始化后不会触及Mapper ......
类代码如下:
public class JsonFileRepository
{
private static final ObjectMapper mapper = new ObjectMapper();
private final ObjectReader reader;
private final ObjectWriter writer;
static
{
AnnotationIntrospector jaxbIntrospector = new JaxbAnnotationIntrospector();
mapper.setDeserializationConfig(mapper.getDeserializationConfig()
.withAnnotationIntrospector(jaxbIntrospector));
mapper.setSerializationConfig(mapper.getSerializationConfig()
.withAnnotationIntrospector(jaxbIntrospector));
mapper.configure(
org.codehaus.jackson.map.SerializationConfig.Feature.WRAP_ROOT_VALUE,
false);
mapper.configure(
org.codehaus.jackson.map.SerializationConfig.Feature.INDENT_OUTPUT,
true);
}
public JsonFileRepository(String entityType, Class clazz) {
this.reader = mapper.reader(clazz);
this.writer = mapper.writerWithType(clazz);
...
修改 我序列化了70个实体,每次运行大约发生2次。每次都在不同的文件中,虽然运行是相同的!
更新 从杰克逊搬到Gson消除了这种行为。因此,绝对要么代表我使用杰克逊,要么是杰克逊的错误
**最终更新** 我能够通过Gson产生类似的现象(尽管不那么频繁), 最后我发现问题确实是一个与序列化包无关的多线程问题。两个线程正在写入同一个文件。