1

假设我有以下 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;
}

然后System.out.println(JsonbBuilder.create().toJson(Code.Code1))会导致""Code1". 我想得到以下结果:

{
  "shorttext": "Short text 1",
  "longtext": "Long text 1"
}

有没有一种舒适的方法来实现这一目标?也许我可以使用任何注释?还是必须实现自定义适配器?

顺便说一句:org.json.JSONObject默认情况下会产生所需的格式。

4

2 回答 2

0

我对 JSON-B 不是很熟悉,但您似乎需要按照此处所述编写序列化程序:http: //json-b.net/docs/user-guide.html#serializersdeserializers

它可能与Customer给出的示例相似。就像是:

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();
    }
}
于 2021-04-23T11:47:26.687 回答
-1

你可以这样做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));

输出:{"longtext":"Long text 1","shorttext":"Short text 1"}

此外,您还需要添加@Getter到您的Code enum

于 2021-04-23T06:45:28.487 回答