java - JSON 解析错误 : Can not construct instance of class

标签 java json post spring-boot spring-restcontroller

Unable to map json string with java object, getting error JSON parse error: Can not construct instance of com.test.CPInput$Evc$Uni

错误:

{
"timestamp": 1502270576300,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "**JSON parse error: Can not construct instance of com.test.CPInput$Evc$Uni: can only instantiate non-static inner class by using default, no-argument constructor; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.test.CPInput$Evc$Uni: can only instantiate non-static inner class by using default, no-argument constructor at [Source: java.io.PushbackInputStream@edc246; line: 20, column: 9] (through reference chain: com.test.CPInput["evc"]->com.test.CPInput$Evc["uni"]->java.util.ArrayList[0]**)",
"path": "/demo/addCustomer"
}

json

{
  "customerId": "abcdef",
  "customerSegment": {
    "customerType": "customer type",
    "customerSubtype": "subtype",
    "industry": "industry",
    "subIndustry": "subindustry",
    "specialPopulation": " spl population"
  },
  "evc": {
    "evcId": "evcid",
    "action": "PR",
    "serviceId": "assigned prod id",
    "previousValues": {
        "previousName":"evcId",
        "previousValue":"EVC id - OLD"
    },
    "uni": [
      {
        "type": "uniA",
        "uniId": "uni id",
        "siteId": "sidt id",
        "tspCode": "tsp code",
        "elocId": "e loc id",
        "siteClli": "site clli",
        "uniAction": "PR",
        "previousValues": {
            "previousName":"evcId",
            "previousValue":"EVC id - OLD"
        }
      },
      {
        "type": "uniZ",
        "siteId": "sidt id",
        "tspCode": "tsp code",
        "elocId": "e loc id",
        "siteClli": "site clli",
        "uniAction": "PR",
        "previousValues": {
            "previousName":"evcId",
            "previousValue":"EVC id - OLD"
        }
      }
    ]
  },
  "solutionType": "EPL",
  "source": "Orion"
}

CPInput.java

public class CPInput {


    private String customerId;
    private CustomerSegment customerSegment;
    private Evc evc;
    private String solutionType;
    private String source;

    public CPInput() {
        super();
    }

    public class CustomerSegment{
        private String customerType;
        private String customerSubtype;
        private String industry;
        private String subIndustry;
        private String specialPopulation;
        //getter setter

    }

    public class Evc{
        private String evcId;
        private String action;
        private String serviceId;
        private PreviousValues previousValues;
        private List<CPInput.Evc.Uni> uni=new ArrayList<CPInput.Evc.Uni>();
        //getter setter

        public class PreviousValues{
            private String previousName;
            private String previousValue;
            //getter setter

        }


        public class Uni{
            private String type;
            private String uniId;
            private String siteId;
            private String tspCode;
            private String elocId;
            private String siteClli;
            private String uniAction;
            private PreviousValues previousValues;
            //getter setter

            public class PreviousValues{
                private String previousName;
                private String previousValue;
                //getter setter

    }

//getter setter

}

DemoController.java

@RestController
@SpringBootApplication(scanBasePackages = {"com.test"})
@RequestMapping(value = "/demo")
public class DemoController {

    @RequestMapping(method = RequestMethod.POST, value = "/addCustomer")
    public CPOutput addCustomer(@RequestBody CPInput input) {
        System.out.println(input);      
        return null;
    }

}

最佳答案

尝试将静态内部类用于:CustomerSegment、Evc、PreviousValues 和 Uni。

我一直使用静态内部类,我没有遇到过这样的问题。

关于java - JSON 解析错误 : Can not construct instance of class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45586802/

相关文章:

java - CDI Bean 的方法可以返回它创建的托管 Bean 吗?

javascript - 如何从 github API 解析链接头

javascript - 如何通过$http从AngularJs(前端)读取json数据到Grails(服务器端)

javascript - 在beforeunload中添加隐藏字段

从 POST 获取InputStream 时出现 JAVA EOFException

Java float 和 double 差异

Java Swing : Expanding TreeNode

json - 使用curl POST 使用 multipart/form-data 将二进制文件作为 JSON 参数传递

php - 长 POST 数据被 Suhosin 丢弃,可能是什么设置造成的?

java - 在 Maven 项目中添加最新版本的依赖项会保证项目无故障吗?