Java Jackson多态反序列化与Spring Boot | JSON解析错误:对象条目内/之间的输入意外结束
我正在使用@JsonTypeInfo和@JsonSubTypes对实体进行序列化/反序列化 下面是我正在做的代码Java Jackson多态反序列化与Spring Boot | JSON解析错误:对象条目内/之间的输入意外结束,java,spring-boot,jackson,marshalling,jackson-databind,Java,Spring Boot,Jackson,Marshalling,Jackson Databind,我正在使用@JsonTypeInfo和@JsonSubTypes对实体进行序列化/反序列化 下面是我正在做的代码 OrganizationDTO.java FullTimeEmployeeDTO.java(子类) PartTimeEmployeeDTO.java(子类) 组织控制员 我得到的例外如下 { "timestamp": "2019-11-29T10:35:29.146+0000", "status": 400, "error": "Bad Request",
{
"timestamp": "2019-11-29T10:35:29.146+0000",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Unexpected end-of-input within/between Object entries; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected end-of-input within/between Object entries\n at [Source: (PushbackInputStream); line: 10, column: 21] (through reference chain: com.example.demo.dto.OrganizationDTO[\"employees\"]->java.util.ArrayList[1])",
"path": "/organizations"
}
我想知道,在试图通过readValue()
将字符串JSON转换为OrganizationDTO
对象时,同样的实现是否起作用。下面是一个例子
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
OrganizationDTO orgDTO = mapper.readValue(
"{\n" +
" \"name\": \"My Organization\",\n" +
" \"employees\": [\n" +
" {\n" +
" \"type\": \"full\",\n" +
" \"name\": \"Vinit Solanki\",\n" +
" \"salary\": 200\n" +
" },\n" +
" {\n" +
" \"type\": \"full\",\n" +
" \"name\": \"Vinit Solanki\",\n" +
" \"salary\": 130\n" +
" }\n" +
" ]\n" +
"}",
OrganizationDTO.class);
}
有人知道我为什么会犯这个错误吗?谢谢。看起来您的端点没有收到完整的json字符串(
输入的意外结束
)。您是否可以检查/打开spring boot上的日志,并查看它试图反序列化到OrganizationDTO
中的字符串是什么?您的端点似乎没有接收到完整的json字符串(输入的意外结束
)。您能否检查/打开spring boot上的日志,并查看它试图反序列化到组织中的字符串是什么?
@JsonTypeName("full")
public class FullTimeEmployeeDTO extends EmployeeDTO {
private int salary;
//getter and setter
}
@JsonTypeName("part")
public class PartTimeEmployeeDTO extends EmployeeDTO {
private int hourlyRate;
//getter and setter
}
@PostMapping
public ResponseEntity<ResponseUtil<Employee>> save(@RequestBody OrganizationDTO organization) {
organizationService.save(organization);
return new ResponseEntity<>(new ResponseUtil<Employee>("Data Saved Successfully."), HttpStatus.CREATED);
}
{
"name": "My Organization",
"employees": [
{
"type": "full",
"name": "Vinit Solanki",
"salary": 200
},
{
"type": "full",
"name": "Viren Shah",
"salary": 300
}
]
}
{
"timestamp": "2019-11-29T10:35:29.146+0000",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Unexpected end-of-input within/between Object entries; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected end-of-input within/between Object entries\n at [Source: (PushbackInputStream); line: 10, column: 21] (through reference chain: com.example.demo.dto.OrganizationDTO[\"employees\"]->java.util.ArrayList[1])",
"path": "/organizations"
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
OrganizationDTO orgDTO = mapper.readValue(
"{\n" +
" \"name\": \"My Organization\",\n" +
" \"employees\": [\n" +
" {\n" +
" \"type\": \"full\",\n" +
" \"name\": \"Vinit Solanki\",\n" +
" \"salary\": 200\n" +
" },\n" +
" {\n" +
" \"type\": \"full\",\n" +
" \"name\": \"Vinit Solanki\",\n" +
" \"salary\": 130\n" +
" }\n" +
" ]\n" +
"}",
OrganizationDTO.class);
}