使用POJO和Enum的JSON到Spring控制器

时间:2017-02-15 20:43:46

标签: java json spring spring-mvc

我需要映射这样的东西:

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
}

但是提供商内部有一个枚举:

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
}

和String to Provider:

@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)

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

1 个答案:

答案 0 :(得分:1)

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

public Provider() {}