【问题标题】:Spring @Requestbody not mapping to inner classSpring @Requestbody 未映射到内部类
【发布时间】:2017-03-16 20:15:09
【问题描述】:

我正在使用 Spring 4.x 做 Spring Rest Api 项目

这行得通:

Controller.java

@PostMapping("newTransaction")
TransactionRequestModel insertNewTransaction(@RequestBody TransactionRequestModel model){
    //do something
}

TransactionRequestModel.java

public class TransactionRequestModel {
    private int id;
    private List<KeyValue> keyValueList;
    public TransactionRequestModel(){}
    //default constructor
    //getter-setter 
}

KeyValue.java

public class KeyValue {

    String key;
    String value;
    //default constructor
    //setter-getter
}

请求正文 Json

{
  "id": 1 
  "keyValueList": [
    {
      "key": "dummy",
      "value": "dummy"
    }
  ]
}

使用 jackson 的 Spring 消息转换器工作正常。

这不会:

当我将 TransactionRequestModel.java 更改为以下(并删除 KeyValue.java

public class TransactionRequestModel {

    public class KeyValue {     
      String key;
      String value;
      //default constructor
      //setter-getter
    }
    private int id;
    private List<KeyValue> keyValueList;
    public TransactionRequestModel(){}
    //default constructor
    //getter-setter 
}

意思是,将KeyValue设为内部类,出现以下错误。

org.springframework.http.converter.HttpMessageNotReadableException: 无法读取文档:没有找到适合类型的构造函数 [简单型、类 com.example.model.TransactionRequestModel$KeyValue]:不能 从 JSON 对象实例化(缺少默认构造函数或创建者, 或者可能需要添加/启用类型信息?)

为什么?

SO 中的所有相关帖子都提到了第一种情况。我想知道为什么这行不通。请帮忙。

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    你必须让你的内部类static

    public class TransactionRequestModel {
    
      public static class KeyValue {     
        String key;
        String value;
        //default constructor
        //setter-getter
      }
      private int id;
      private List<KeyValue> keyValueList;
      public TransactionRequestModel(){}
      //default constructor
      //getter-setter 
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2019-11-10
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多