【问题标题】:Jackson unable to Map Class using ObjectMapperJackson 无法使用 ObjectMapper 映射类
【发布时间】:2015-05-18 15:24:22
【问题描述】:

我正在尝试使用 Jackson 序列化一个包含两个字符串和字符串到字符串的映射的类。这是我要序列化的json。我想知道是否有问题,因为我正在尝试序列化空数组。

{
    "filters": {
        "test": [
            "hi"
        ],
        "groups": [],
        "groupsOT": [],
        "chains": [],
        "chainsOT": [],
        "locations": [],
        "locationsOT": [],
        "reports": [],
        "reportsOT": []
    },
    "fromDate": "09.03.2015",
    "toDate": "16.03.2015"
}

这是用于尝试序列化的类。

public class FilterRequest{
    public String getToDate() {
        return toDate;
    }

    public void setToDate(String toDate) {
        this.toDate = toDate;
    }

    public String getFromDate() {
        return fromDate;
    }

    public void setFromDate(String fromDate) {
        this.fromDate = fromDate;
    }

    public Map<String, String[]> getFilters() {
        return filters;
    }

    public void setFilters(Map<String, String[]> filters) {
        this.filters = filters;
    }

    private String toDate;
    private String fromDate;
    private Map<String,String[]> filters;

    public FilterRequest(){
        filters = new HashMap<String,String[]>();
    }


}

失败的代码很简单

    ObjectMapper mapper = new ObjectMapper();
    FilterRequest requestParams = mapper.readValue(requestBody, FilterRequest.class);

我得到的错误是

No suitable constructor found for type [simple type, class com.aramburu.overall.web.controller.FilterController$FilterRequest]: can not instantiate from JSON object (need to add/enable type information?)
at [Source: {"filters":{"test":["hi"],"groups":[],"groupsOT":[],"chains":[],"chainsOT":[],"locations":[],"locationsOT":[],"reports":[],"reportsOT":[]},"fromDate":"09.03.2015","toDate":"16.03.2015"}; line: 1, column: 2]

【问题讨论】:

标签: java jackson


【解决方案1】:

输出: No suitable constructor found for type [simple type, class com.aramburu.overall.web.controller.FilterController$FilterRequest 暗示 FilterRequest 是一个内部类。

FilterRequest 类设为静态(或者 - 更好的是 - 将其移出 FilterController)。

否则 Jackson 无法实例化它(它需要父类的外部实例才能构造内部实例)。

【讨论】:

    【解决方案2】:

    如果您的类被声明为内部类,则需要将其设为静态。例如:

    public class Application {
    
        private static final String requestBody = "{\"filters\": {\"test\": [\"hi\"],\"groups\": [],\"groupsOT\": [],\"chains\": [],\"chainsOT\": [],\"locations\": [],\"locationsOT\": [],\"reports\": [],\"reportsOT\": []},\"fromDate\": \"09.03.2015\",\"toDate\": \"16.03.2015\"}";
    
    
        public static void main(String[] args) throws IOException {
            ObjectMapper mapper = new ObjectMapper();
            FilterRequest requestParams = mapper.readValue(requestBody, FilterRequest.class);
    
            System.out.println(requestParams);
        }
    
        public static class FilterRequest{
            public String getToDate() {
                return toDate;
            }
    
            public void setToDate(String toDate) {
                this.toDate = toDate;
            }
    
            public String getFromDate() {
                return fromDate;
            }
    
            public void setFromDate(String fromDate) {
                this.fromDate = fromDate;
            }
    
            public Map<String, String[]> getFilters() {
                return filters;
            }
    
            public void setFilters(Map<String, String[]> filters) {
                this.filters = filters;
            }
    
            private String toDate;
            private String fromDate;
            private Map<String,String[]> filters;
    
            public FilterRequest(){
                filters = new HashMap<String,String[]>();
            }
    
            @Override
            public String toString() {
                return ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE);
            }
        }
    }
    

    问候,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 2019-11-25
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多