在我的应用程序中,我有Serie,每个人都有2个字段来表示纹理和.obj文件。
@Entity
public class Serie extends Model {
public File obj;
public File texture;
}
我的文件类:
@Entity
public class File extends Model{
public String path;
}
我想生成一个Json文件来描述我的对象。如您所见,File类只有一个字段。出于这个原因,我想生成一个没有JsonArray的Json来描述我的文件字段。
使用杰克逊库,它生成一个像这样的json:
{"obj":{"path":"obj/600s"}, "texture":{"path":"text/600s"}}
我想生成这样的:
{"obj":"obj/600s", "texture":"text/600s"}
一个部分有效的选项是使用Jackson的注释@JsonUnwrapped。
@Entity
public class Serie extends Model {
@JsonUnwrapped
public File obj;
public File texture;
}
杰克逊使用它生成一个像这样的json:
{"path":"obj/600s", "texture":{"path":"text/600s"}}
所以这对我不起作用,因为我不能用于obj,纹理字段,我想在json上保留字段的名称。
我知道这是一个具体的问题。无论如何,提前谢谢
答案 0 :(得分:2)
您可以编写自定义getter来实现目标:
public class Serie extends Model {
public File obj;
public File texture;
@JsonProperty("obj")
public String getObjPath() {
return obj.path;
}
@JsonProperty("texture")
public String getTexturePath() {
return texture.path;
}
}
/我假设自动检测已关闭/
答案 1 :(得分:1)
您想要使用的是@JsonValue,但是不能在字段上设置注释,只能在方法(getter)上设置:
@Entity
public static class File {
public String path;
@JsonValue
public String getPath() {
return path;
}
}
如果您只需要序列化,那么这就是您需要做的。如果还需要反序列化,则需要单个arg字符串构造函数或json的静态工厂方法才能反序列化数据。
答案 2 :(得分:0)
另一种解决方案:
@Entity
@JsonSerialize(using=com.fasterxml.jackson.databind.ser.std.ToStringSerializer)
public class File extends Model{
public String path;
// Could be generated by lombok:
File(String path) {
this.path = path;
}
@Override public String toString() {
return path;
}
}