Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson多态反序列化与Spring Boot | JSON解析错误:对象条目内/之间的输入意外结束_Java_Spring Boot_Jackson_Marshalling_Jackson Databind - Fatal编程技术网

Java Jackson多态反序列化与Spring Boot | JSON解析错误:对象条目内/之间的输入意外结束

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",

我正在使用@JsonTypeInfo和@JsonSubTypes对实体进行序列化/反序列化

下面是我正在做的代码

  • OrganizationDTO.java
  • FullTimeEmployeeDTO.java(子类)
  • PartTimeEmployeeDTO.java(子类)
  • 组织控制员
  • 我得到的例外如下

    {
        "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);
    
        }