如何在JSON-B的JSON表示中包含Java枚举的字段?
假设我有以下Java枚举:如何在JSON-B的JSON表示中包含Java枚举的字段?,java,json,jsonb-api,Java,Json,Jsonb Api,假设我有以下Java枚举: @AllArgsConstructor public enum Code { Code1("Short text 1", "Long text 1"), Code2("Short text 2", "Long text 2"); private final String shorttext; private final String longtext; }
@AllArgsConstructor
public enum Code {
Code1("Short text 1", "Long text 1"),
Code2("Short text 2", "Long text 2");
private final String shorttext;
private final String longtext;
}
然后,System.out.println(JsonbBuilder.create().toJson(code.Code1))
将产生“Code1”
。我希望得到以下结果:
{
"shorttext": "Short text 1",
"longtext": "Long text 1"
}
是否有一种舒适的方法来实现这一点?也许我可以使用任何注释?或者是强制实现自定义适配器
顺便说一句:
org.json.JSONObject
默认情况下会生成所需的格式。您可以使用Map
执行此操作,如下所示:
Map<String, String> textMap = new HashMap<>();
textMap.put("longtext", Code.Code1.getLongtext());
textMap.put("shorttext", Code.Code1.getShorttext());
System.out.println(JsonbBuilder.create().toJson(textMap));
Map textMap=newhashmap();
put(“longtext”,Code.Code1.getLongtext());
textMap.put(“shorttext”,Code.Code1.getShorttext());
System.out.println(JsonbBuilder.create().toJson(textMap));
输出:{“长文本”:“长文本1”,“短文本”:“短文本1”}
此外,您还需要将
@Getter
添加到代码枚举中
我对JSON-B不是很熟悉,但您似乎需要编写一个序列化程序,如下所述:
它可能类似于给定的客户示例。类似于:
public static class CodeSerializer implements JsonbSerializer<Code> {
@Override
public void serialize(Code code, JsonGenerator generator, SerializationContext ctx) {
generator.writeStartObject();
generator.write("shorttext", code.getShorttext());
generator.write("longtext", code.getLongtext());
generator.writeEnd();
}
}