【发布时间】:2021-11-09 01:24:10
【问题描述】:
我在序列化方面遇到问题,尽管我一直在寻找,但我无法找到解决方案。
我的@RestController 里面有类似这个方法和端点的东西:
public ResponseEntity<String>(@RequestBody RequestObject requestObject )
RequestObject 看起来像这样:
public class RequestObject {
private Driver driver;
private List<Tracks> tracks;
//constructors, getters and setters
}
public class Tracks {
private Enum1 name;
private List<Enum2> missions;
//constructors, getters and setters
}
所以,问题在于 Enum2 的List。这是因为我从 JSON 收到的不是字符串列表,而是一个字符串,我需要对其进行解析以转换为 Enum2
所以Enum2 看起来像这样:
A,
B,
C;
我从 JSON 请求中得到的是:
{
"driver" : {
"name" : "myname"
}
},
"tracks" : [
{
"name" : "madrid",
"missions" : "ABCCBA"
},
{
"name" : "barcelona",
"mission" : "CBBCA"
},
]
}
除了List<Enum2> missions之外,所有反序列化都可以完美地开箱即用(包括所有嵌套枚举)
我设法做了一个肮脏的把戏,但我想以正确的方式来做,我理解这将是编写某种反序列化器,它在控制器被触发时运行,并完成所有的解析和转换从字符串到列表(这个拆分代码我有,但是不知道放在哪里)。
目前我得到了这个
2021-09-13 21:02:34.924 WARN 99904 --- [nio-8080-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.ArrayList<org.package.model.Enum2>` from String value (token `JsonToken.VALUE_STRING`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<org.model.Enum2>` from String value (token `JsonToken.VALUE_STRING`)
at [Source: (PushbackInputStream); line: 13, column: 26] (through reference chain: org.model.RequestObject["missions"]->java.util.ArrayList[0]-org.model.Track["missions"])]
有没有办法做到这一点?
【问题讨论】:
-
您是否正确发送了 Enum2 值?它们应该采用 [A,B,C...] 格式才能进行解码。你能检查或分享你的数据发送到哪里的代码吗?
标签: java json spring jackson deserialization