2015-05-05 111 views
1

我有我的控制器,如下所示。 RelationTypeTable类中的字段。我有以下例外。有任何想法吗?无法读取JSON

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not construct instance of com.mycompany.myapp.core.domain.RelationType from String value 'unionetomany': value not one of declared Enum instance names: [unionetoone, unionetomany] 
at [Source: [email protected]; line: 1, column: 435] (through reference chain: com.mycompany.myapp.core.domain.Table["relations"]->com.mycompany.myapp.core.domain.Relation["relationtype"]); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of com.mycompany.myapp.core.domain.RelationType from String value 'unionetomany': value not one of declared Enum instance names: [unionetoone, unionetomany, unimanytoone, unimanytomany, bionetoone, bionetomany, bimanytoone, bimanytomany] 
at [Source: [email protected]; line: 1, column: 435] (through reference chain: com.mycompany.myapp.core.domain.Table["relations"]->com.mycompany.myapp.core.domain.Relation["relationtype"]) 
    at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:228) 
    at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.read(MappingJackson2HttpMessageConverter.java:220) 
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:138) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:183) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:98) 
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:79) 

@RequestMapping(method = RequestMethod.POST) 
    public void validateSchema(@RequestBody Table[] tables, HttpServletRequest request) { 
    ...... 
} 

public enum RelationType { 
    UNI_ONE_TO_ONE("unionetoone"), 
    UNI_ONE_TO_MANY("unionetomany"); 

    private final String text; 

    private RelationType(final String text) { 
     this.text = text; 
    } 

    @Override 
    public String toString() { 
     return text; 
    } 
} 

回答

2

默认情况下Enum小号name用于序列化,不能什么toString()回报。所以,虽然错误信息令人困惑(它应该列出预期的实际值),但问题在于预期为UNI_ONE_TO_MANY

如果您想使用toString()返回的值,您应该可以将注释@JsonValue添加到toString()方法,并且应该指示该值应该用于序列化。

另一种方法是启用DeserializationFeature.READ_ENUMS_USING_TO_STRING,这将改变全局行为。