{
name: "math",
code:null,
description:"Mathematics",
id:null,
name:"math",
noExam:null,
teacher:{
id: "57869ced78aa7da0d2ed2d92",
courseGroup:"LKG",
experties:[{type: "SOCIALSTUDIES", id: "3"}, {type: "PHYSICS", id: "4"}]
},
id:"57869ced78aa7da0d2ed2d92"
}
如果您看到我的实体类,我在teacher.java中有一组枚举。
当我试着发布这个时,我会出错
JsonMappingException: Can not deserialize instance of com.iris.fruits.domain.enumeration.Experties out of START_OBJECT token
我已经尝试了几乎所有的解决方案,比如deserializationfeature.accept_single_value_as_array
,但没有成功。
public class Subject implements Serializable {
// all the other fields
@JoinColumn(name = "teacher_id")
private Teacher teacher;
// getter and setter
}
public class Teacher implements Serializable {
// all the other fields
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String id;
@Enumerated(EnumType.STRING)
@Column(name = "experties")
@JsonProperty("experties")
private List< Experties> experties;
// getter and setter
}
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Experties implements Serializable {
MATH(1,"MATH"),
SCIENCE(2,"SCIENCE"),
SOCIALSTUDIES(3,"SOCIALSTUDIES"),
PHYSICS(4,"PHYSICS"),
CHEMISTRY(5,"CHEMISTRY");
@JsonSerialize(using = ToStringSerializer.class)
private String type;
@JsonSerialize(using = ToStringSerializer.class)
private Integer id;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
Experties(Integer id, final String type) {
this.id = id;
this.type = type;
}
}
出现此问题是因为枚举
中有一个自定义序列化器(@jsonFormat(shape=jsonFormat.shape.object)
)。因此,为了解决这个问题,您需要一个自定义的反序列化程序。
可以使用以下方法定义自定义反序列化程序:
@JsonFormat(shape = JsonFormat.Shape.OBJECT) // custom serializer
@JsonDeserialize(using = MyEnumDeserializer.class) // custom deserializer
public enum Experties implements Serializable {
...
}
自定义反序列化程序为:
public static class MyEnumDeserializer extends JsonDeserializer<Experties> {
@Override
public Experties deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
JsonNode node = jsonParser.getCodec().readTree(jsonParser);
String type = node.get("type").asText();
return Stream.of(Experties.values())
.filter(enumValue -> enumValue.getType().equals(type))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("type "+type+" is not recognized"));
}
}
我想用Spring Boot编写一个小而简单的REST服务。下面是REST服务代码: 我发送的JSON对象如下: 警告964---[XNIO-2 task-7].w.s.m.s.DefaultHandlerExceptionResolver:无法读取HTTP消息:org.SpringFramework.HTTP.Converter.HttpMessageNotReadableException:无
下面有一个JSON,我试图使用Jackson将其解析为POJO 我的响应POJO片段如下 以及他们的吸气手和二传手 当我得到“org.codehaus.jackson.map.jsonMappingException:Can not deserialize instance of java.util.list out of START_OBJECT token”时,我的声明是否错误? 解析逻辑如下
如下所示 但是在执行它时,我遇到了以下错误,当它是JSON中的JSON时,我很小心地创建了一个新类,就像在usagenlu中一样
我正在尝试发布一个自定义对象的。请求体中的JSON如下所示: 处理请求的服务器端代码: 实体: 但会引发异常:
例外情况: 套接字处理程序 我相信当JSON被解析为WorkstationRequest对象时会出现异常,原因是下面的项。这是套接字处理程序: 我不知道如何开始调试它。堆栈跟踪从未触及我的应用程序。我正在使用部署我的.jar,并使用执行它
在执行从serviceA到serviceB的请求时, serviceA中的测试请求是