我找不到为什么我从Jacksoin得到一个异常,即使一切看起来都很好。
我有以下JSON:
{
"id": "8a599509-994a-4cff-ad6d-c3f770e8d159",
"action": "0",
"code": "13",
"device_id": "0BC813D9-37FE-4FAB-9FA0-05F85CBAE777",
"branch_id": "0BC813D9-37FE-4FAB-9FA0-05F85CBAE999",
"description": "Sergio sei uno stra-figo",
"date": "2021-11-09T10:22:45",
"severity": 1
}
以及我需要将Json反序列化为:
@JsonIgnorePropenter code hereerties(ignoreUnknown = true)
public class LogMdto {
private String id;
public String getId() {
return id;
}
@JsonProperty(value = "object_id")
private String objectId;
@Size(max = Log.objectNameSize, message = "size may not by bigger than " + Log.objectNameSize)
@JsonProperty(value = "object_name")
private String objectName;
@JsonProperty("device_id")
private String deviceId;
@NotNull(message = "may not be null")
private String description;
@NotNull(message = "may not be null")
@Size(max = Log.codeSize,
message = "size may not by bigger than " + Log.codeSize)
private String code;
private Integer action;
private String id;
private int severity;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss")
private Timestamp date;
public Timestamp getDate() {
return date;
}
public void setDate(String date) {
DateTimeFormatter dft = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
this.date = Timestamp.valueOf(LocalDateTime.from(dft.parse(date)));
}
public String getObjectId() {
return objectId;
}
public void setObjectId(String objectId) {
this.objectId = objectId;
}
public String getObjectName() {
return objectName;
}
public void setObjectName(String objectName) {
this.objectName = objectName;
}
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public Integer getAction() {
return action;
}
public void setAction(Integer action) {
this.action = action;
}
public void setId(String id) {
this.id = id;
}
public int getSeverity() {
return severity;
}
public void setSeverity(int severity) {
this.severity = severity;
}
我不明白为什么这个例外。字段deviceId与@jsonproperty(“device_id”)映射,我有setter和getter,但我仍然是一个错误。
更新
我做了以下更改:
//Removed the annotation
private String deviceId;
@JsonProperty(value = "device_id")
public String getDeviceId() {
return deviceId;
}
@JsonProperty(value = "device_id")
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
如果我没有弄错的话,因为它是一个私有字段,所以不使用字段@jsonproperty
注释本身,而是使用getter/setter。
getter/setter将用于序列化/反序列化,在这两种情况下,它们与device_id
名称不匹配;
要修复它:将@jsonproperty
添加到getter/setter中。
@JsonProperty("device_id")
public String deviceId;
@JsonIgnoreProperties(ignoreUnknown = true)
public class LogMdto {
private String id;
@JsonProperty(value = "object_id")
private String objectId;
@JsonProperty(value = "object_name")
private String objectName;
private String deviceId;
@NotNull(message = "may not be null")
private String description;
@NotNull(message = "may not be null")
private String code;
private Integer action;
private int severity;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")
private Timestamp date;
public String getId() {
return id;
}
public Timestamp getDate() {
return date;
}
public void setDate(String date) {
DateTimeFormatter dft = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
this.date = Timestamp.valueOf(LocalDateTime.from(dft.parse(date)));
}
public String getObjectId() {
return objectId;
}
public void setObjectId(String objectId) {
this.objectId = objectId;
}
public String getObjectName() {
return objectName;
}
public void setObjectName(String objectName) {
this.objectName = objectName;
}
@JsonProperty("device_id")
public String getDeviceId() {
return deviceId;
}
@JsonProperty("device_id")
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public Integer getAction() {
return action;
}
public void setAction(Integer action) {
this.action = action;
}
public void setId(String id) {
this.id = id;
}
public int getSeverity() {
return severity;
}
public void setSeverity(int severity) {
this.severity = severity;
}
}
public static void main(String[] args) throws Exception{
String jsonTest = "{\n" +
" \"id\": \"8a599509-994a-4cff-ad6d-c3f770e8d159\",\n" +
" \"action\": \"0\",\n" +
" \"code\": \"13\",\n" +
" \"device_id\": \"0BC813D9-37FE-4FAB-9FA0-05F85CBAE777\",\n" +
" \"branch_id\": \"0BC813D9-37FE-4FAB-9FA0-05F85CBAE999\",\n" +
" \"description\": \"Sergio sei uno stra-figo\",\n" +
" \"date\": \"2021-11-09T10:22:45\",\n" +
" \"severity\": 1\n" +
" }";
LogMdto logMdto = new ObjectMapper().readValue(jsonTest, LogMdto.class);
System.out.println(logMdto.getDeviceId());
}
0BC813D9-37FE-4FAB-9FA0-05F85CBAE777
我这里有一个代码片段,基本上展示了Dan提到的想法,即提升react中的内容,以自然地提高性能并编写更简洁的代码。在InputField组件中,按钮总是呈现,这不是我想要的行为,它应该跳过呈现按钮组件。所以它应该做的是跳过渲染,因为按钮是inputfield的子道具,如果子道具没有改变,react将跳过渲染。 Dan解释的类似概念示例:“当颜色改变时,ColorPicker重新渲染。但它仍然有上次
我希望类中的方法在IO线程上运行一些代码,但只有一次它们订阅的主题具有特定值。然后调用者应该在AndroidUI线程上得到响应。 像这样的东西: 这有用吗?不确定,所以我写了一组单元测试来检查它们。我发现我的测试方法,尽管它们在一个接一个地运行时总是有效的,但作为套件的一部分会失败。 事实上,我发现如果我把同样的测试进行两次,第一次会通过,但第二次会失败! 为什么会这样?被测类中的bug是,还是测
问题内容: 有人可以向我解释一下吗: 我从不理解,我认真地认为,如果有人不尝试向我深入解释,我永远也不会。这整个上下文使我感到困惑。有时它是这样的: 有时它不会那样工作,但只接受: 有时是: 等等等等等。 我了解上下文的基础,但是有几项?为什么日食会一次又一次地向我抛出错误呢?为什么有时需要声明上下文?: 我无法在所有情况下都找到合适的环境,我怎么知道在每种情况下都合适的环境? 问题答案: 首先,
我尝试反序列化一个巨大的API负载。这个有效负载包含的字段比我需要的要多,因此我正在使用。但是,在某些情况下,反序列化会失败,并显示错误消息: 我找到了解决方案,建议使用 我试过这个。但这于事无补。此外,我的结果数据不是一个单一的值数组。它实际上包含两个值——因此解决方案无论如何都不会相加。 以下是反序列化的目标类。 下面是我测试它的单元测试: 这是我想要反序列化的有效负载
这是我的代码: 我的映射是字符串到整数,那么50是从哪里来的???
我正在创建一个自定义Jackson反序列化器类来将JSON负载映射到一个对象。在我的方法中,我对JSON负载进行了一些检查,以查看是否缺少任何字段或与POJO不一致。 我尝试在方法中抛出异常,方法如下所示: 但是,我不允许在方法中抛出我自己的异常,因为该方法实现了一个接口,我只能抛出和: 在这种情况下,当执行反序列化时,如何验证JSON有效负载?