Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使GSON将普通字符串属性视为原子引用<;字符串>;?_Java_Json_Gson - Fatal编程技术网

Java 如何使GSON将普通字符串属性视为原子引用<;字符串>;?

Java 如何使GSON将普通字符串属性视为原子引用<;字符串>;?,java,json,gson,Java,Json,Gson,我有一个接受JSON的web服务,我使用GSON将JSON字符串转换为POJO POJO示例: class POJO{ AtomicReference<String> property; } 类POJO{ 原子参考性质; } JSON字符串示例: {“属性”:“val”} 但是,当GSON解析JSON字符串时,它会抛出JSONSyntaxException,因为它希望JSON字符串为: {“属性”:{“值”:“val”} 我是否只需要用非并发变量编写POJO

我有一个接受JSON的web服务,我使用GSON将JSON字符串转换为POJO

POJO示例:

class POJO{
    AtomicReference<String> property;       
}
类POJO{
原子参考性质;
}
JSON字符串示例:

{“属性”:“val”}

但是,当GSON解析JSON字符串时,它会抛出JSONSyntaxException,因为它希望JSON字符串为:

{“属性”:{“值”:“val”}

我是否只需要用非并发变量编写POJO(POJO2)的对应项,然后使用POJO2值用并发变量初始化POJO(POJO1)?或者,有没有办法让GSON将AtomicReference变量视为字符串


如果我使用前一种方法,它就取消了GSON从json字符串动态输出对象的功能。

我再次咨询了谷歌,发现了制作TypeAdapters的方法。因此,我为它推出了自己的类型适配器。我还在POJO类中使用其他原子对象,如AtomicLong,这种方法也适用于它

class AtomicStringTypeAdapter extends TypeAdapter<AtomicReference<String>> {

    @Override
    public AtomicReference<String> read(JsonReader in) throws IOException {

        AtomicReference<String> value = null;

        JsonParser jsonParser = new JsonParser();
        JsonElement je = jsonParser.parse(in);

        if (je instanceof JsonPrimitive) {
            value = new AtomicReference<String>();
            value.set(((JsonPrimitive) je).getAsString());
        } else if (je instanceof JsonObject) {
            JsonObject jsonObject = (JsonObject) je;
            value = new AtomicReference<String>();
            value.set(jsonObject.get("value").getAsString());
        }

        return value;
    }

    @Override
    public void write(JsonWriter out, AtomicReference<String> value) throws IOException {
        if (value != null) {
                out.beginObject();
                out.name("value").value(value.get());
                out.endObject();
        }
    }
}
类AtomicStringTypeAdapter扩展了TypeAdapter{
@凌驾
公共原子引用读取(JsonReader in)引发IOException{
原子参考值=null;
JsonParser JsonParser=新的JsonParser();
JsonElement je=jsonParser.parse(in);
if(JsonPrimitive的je实例){
值=新的原子引用();
value.set(((JsonPrimitive)je.getAsString());
}else if(JsonObject的je实例){
JsonObject JsonObject=(JsonObject)je;
值=新的原子引用();
value.set(jsonObject.get(“value”).getAsString());
}
返回值;
}
@凌驾
public void write(JsonWriter out,AtomicReference值)抛出IOException{
if(值!=null){
out.beginObject();
out.name(“value”).value(value.get());
out.endObject();
}
}
}

您还需要为原子引用字段编写POJO,这是什么意思?