b的json表示中包含java枚举的字段?

ckx4rj1h  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(361)

假设我有以下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 默认情况下,结果为所需格式。

disho6za

disho6za1#

我对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();
    }
}
bihw5rsg

bihw5rsg2#

你可以用它 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

相关问题