Java 应为字符串,但为BEGIN\u对象我必须返回字符串

Java 应为字符串,但为BEGIN\u对象我必须返回字符串,java,gson,Java,Gson,课程 class PrintRequest { private String data; private String userImageBase64; private String organizationImageBase64; private String fileBase64; //getters and setters } 使用 PrintRequest PrintRequest=gson.fromJ

课程

 class PrintRequest {
        private String data;
        private String userImageBase64;
        private String organizationImageBase64;
        private String fileBase64;
     //getters and setters
    }
使用
PrintRequest PrintRequest=gson.fromJson(request.getBody(),PrintRequest.class)

json

{ 
   "data":{ 
      "nazwaDostawcy":"nazwa dostawcy (opis)",
      "nazwa":"Gniazdo przemysłowe, kątowe, 2p+E, 16A, 100...130 V AC, IP 44 ",
      "kod":"val",
      "kodEan":"val",
      "kodWewnrtrzny":"val",
      "cennaNetto":"val"
   },
   "fileBase64":""
}
就像在主题中一样,我理解为什么会出现此错误,但我需要以字符串形式返回
数据。我怎样才能达到我的目标


谢谢你的帮助

这里是不创建自定义gson序列化的最简单方法。只需重写toString()方法

用法: PrintRequest PrintRequest=gson.fromJson(json,PrintRequest.class); System.out.println(printRequest.getData().toString())

UPD: 使用自定义JsonDeserializer的解决方案

public class CustomJsonDeserializer implements JsonDeserializer<PrintRequest> {

    @Override
    public PrintRequest deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
        PrintRequest printRequest = new PrintRequest();
        JsonObject jsonObject = jsonElement.getAsJsonObject();
        String dataStr="";
        JsonObject jsonObjectData = jsonObject.getAsJsonObject("data");
        for (Data data : Data.values()) {
            dataStr+=(data.name() + ":" + jsonObjectData.get(data.name()).getAsString()+",\n");
        }
        printRequest.setData(dataStr);
        return printRequest;
    }
}


public enum Data {
    nazwaDostawcy,
    nazwa
}

public class PrintRequest {
    private String data;
    private String userImageBase64;
    private String organizationImageBase64;
    private String fileBase64;
    //getters and setters

您需要实现一个自定义反序列化程序,它将任何
jsonement
转换为
String

class ElementAsStringJsonDeserializer implements JsonDeserializer<String> {

    @Override
    public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        return json.toString();
    }
}
另见:


您的JSON似乎不完整。此解决方案不被接受。它必须是字符串:/not强类型objectcheck new solution然后
GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
        gsonBuilder.registerTypeAdapter(PrintRequest.class, new CustomJsonDeserializer());
        Gson gson = gsonBuilder.create();
        PrintRequest printRequest = gson.fromJson(json, PrintRequest.class);
        System.out.println(printRequest.getData());
class ElementAsStringJsonDeserializer implements JsonDeserializer<String> {

    @Override
    public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        return json.toString();
    }
}
@JsonAdapter(ElementAsStringJsonDeserializer.class)
private String data;