gpt4 book ai didi

java - 使用 SimpleModule 的 Jackson MixInAnnotation 不起作用

转载 作者:行者123 更新时间:2023-12-03 23:49:09 24 4
gpt4 key购买 nike

我正在使用 SimpleModule 通过序列化和反序列化注册 MixIn。我无法让它工作。这些类如下所示。当我打印序列化字符串时,我看到打印的大小和属性未按照我在 mixin 中指定的方式命名。它正在打印 {"w":5,"h":10,"size":50}。因此,使用序列化器和反序列化配置进行混合注册是不成功的。我做错了什么。

混合类:

import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;

abstract class MixIn {
MixIn(@JsonProperty("width") int w, @JsonProperty("height") int h) {
}

@JsonProperty("width")
abstract int getW();

@JsonProperty("height")
abstract int getH();

@JsonIgnore
abstract int getSize();

}

矩形类:

 public final class Rectangle {
final private int w, h;

public Rectangle(int w, int h) {
this.w = w;
this.h = h;
}

public int getW() {
return w;
}

public int getH() {
return h;
}

public int getSize() {
return w * h;
}
}

注册混入:

import org.codehaus.jackson.Version;
import org.codehaus.jackson.map.module.SimpleModule;


public class MyModule extends SimpleModule {
public MyModule() {
super("ModuleName", new Version(0, 0, 1, null));
}

@Override
public void setupModule(SetupContext context) {
context.setMixInAnnotations(Rectangle.class, MixIn.class);

// and other set up, if any
}
}

测试类:

import java.io.IOException;

import org.codehaus.jackson.map.ObjectMapper;
import org.junit.Test;

public class DeserializationTest {

@Test
public void test() throws IOException {

ObjectMapper objectMapper = new ObjectMapper();

// objectMapper.getSerializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class);
// objectMapper.getDeserializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class);

String str = objectMapper.writeValueAsString(new Rectangle(5, 10));
System.out.println(str);
Rectangle r = objectMapper.readValue(str, Rectangle.class);

}
}

最佳答案

我没看到你在哪里注册了你的模块MyModule? Jackson 不会接收它,除非你告诉它有一个模块可以使用。您是否尝试过:

objectMapper.registerModule(new MyModule());

在你的测试中(在你实例化 ObjectMapper 之后)?定义混入的模块对我来说效果很好。

当然,如果您只注册几个 Mix-Ins 而没有进行其他配置,使用 addMixInAnnotations() 方法会容易得多。

关于java - 使用 SimpleModule 的 Jackson MixInAnnotation 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15299944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com