【问题标题】:JSON to Spring Controller with POJO and Enum带有 POJO 和 Enum 的 JSON 到 Spring 控制器
【发布时间】:2017-02-15 20:43:46
【问题描述】:

我需要像这样映射:

JSON:

{'field1': 'value1', 'provider': {'name': 'nameprov', 'country': 'CODE'}}

到 Spring MVC 控制器:

@ResponseBody
Dummy getVal(@RequestBody MyCriteria criteria) {

实际上,MyCriteria 是一个扩展它的类:

public abstract class MyCriteria {
  String field1;
  //Getter and setter
  Provider provider;
  //Getter and setter
}

但是 Provider 里面有一个枚举:

public class Provider{
  String name;
  Country country; //Country is an Enum

所以,我创建了一些转换器,但它不起作用。

我将它们添加到网络配置中:

@Override
public void addFormatters (FormatterRegistry registry) {
    registry.addConverter(new StringToCountryConverter());
    registry.addConverter(new StringToProviderConverter());
}

国家/地区字符串:

public Country convert(String s) {
    //It never enters here
}

和提供者的字符串:

@Override
public Provider convert(String[] s) {

    //never here

}

所以我的问题是:我做错了什么?我需要将一个字符串映射到 Country,然后再映射到 Provider,但出现此错误:

Could not read document: Can not construct instance of ...Provider: no suitable constructor found, can not deserialize from Object value...

Provider 有这个构造函数:

public Provider(String name, String country) 
public Provider(String name, Country country)

任何线索,将不胜感激。谢谢!

【问题讨论】:

    标签: java json spring spring-mvc


    【解决方案1】:

    您应该为 Provider 类创建一个默认构造函数,例如

    public Provider() {}
    

    【讨论】:

    • 哦!谢谢!此外,正如我所怀疑的,并非所有转换器都可以实现正确的映射。
    猜你喜欢
    • 2015-02-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2014-08-19
    • 1970-01-01
    • 2013-02-26
    相关资源
    最近更新 更多