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;