java - JSON序列化 - 如何不使用整个结构序列化一个类属性
问题描述
我想序列化一些字符串 json(我使用 Spring Boot):
{
"commandId": "34d3a914-a3d7-112a-bs37-3452ac130002",
"status": "SUCCESS",
"response": {
"prop1": "",
"prop2": "",
"prop3": "true",
"prop4": ""
}
}
我的映射器:
private static final ObjectMapper mapper = new ObjectMapper();
public static <T> T fromJson(String json, TypeReference<T> type) {
T t;
try {
t = mapper.reader().forType(type).readValue(json);
} catch (IOException e) {
String message = "Error converting from json";
log.error(message, e);
throw new IllegalArgumentException(message);
}
映射器的使用:
final Command command =
JsonUtils.fromJson(json, new TypeReference<Command>() {});
命令类:
public class Command {
private UUID commandId;
private status status;
private String response;
private String error;
}
目前我收到错误:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_OBJECT token
我想在 Mongo dbresponse
字段中保存为字符串,稍后在从 DB 接收到该对象后,我可以反序列化整个对象。是否有任何注释告诉 Json 映射器不要序列化response
字段内的结构?
解决方案
除了使用反序列化器之外,另一种更简单的方法是在 Command 类中使用@JsonProperty注释。
public class Command {
private UUID commandId;
private String status;
private String response;
private String error;
public UUID getCommandId() {
return commandId;
}
@JsonProperty("commandId")
public void setCommandId(String commandId) {
this.commandId = UUID.fromString(commandId);
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getResponse() {
return response;
}
@JsonProperty("response")
private void setResponse(Map<String, String> response) {
this.response = response.toString();
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
}
推荐阅读
- python - 重新分配方法参数是好的还是坏的做法是否有共识?
- c++ - 反对“this”是惯用的吗?
- python - dash plotly - 动态创建下拉菜单,选择多行,表格导出?
- excel - vba:从数组中获取唯一值:解释
- python - 带有多个文件的 os.path.join 不起作用
- java - Java8 - 将非常大的 XML 输入转换为 JSON(带有额外属性)
- node.js - 如何将方法分成不同的文件,然后将它们捆绑在一个文件中以要求这样做
- sql - SQL Server:如何替换文本字段中的换行符?
- ruby-on-rails - docker-compose 上的 rails 应用程序:db:migration 显示“权限被拒绝”
- amazon-web-services - 负载均衡器证书转移/在另一个区域重用