Spring控制器枚举请求验证

时间:2016-11-16 09:36:16

标签: java spring spring-mvc

我有一个简单的弹簧支架控制器,看起来像这样。

@RestController
public class MyController {

@RequestMapping(path = "mapping", method = RequestMethod.POST, produces = {"application/json"})
    public MyResponse create(@RequestBody MyModel requestParam
    ) throws InvalidApplicationSentException, AuthenticationFailedException {
 // method body
}

以下是用作请求参数的MyModel类。

public class MyModel {
    private RequestType requestType;
    // a lot of other properties ..
}

现在,当我尝试调用此端点为RequestType传递无效值时,我得到一个例外:

org.springframework.http.converter.HttpMessageNotReadableException
Could not read document: Can not construct instance of com.mypackage.RequestType from String value 'UNDEFINED': value not one of declared Enum instance names: [IMPROTANT, NOT_IMPORTANT]

有没有一种方法,当传递不正确的值并且不抛出错误时,spring会将枚举设置为null?

我正在使用spring 4,我更喜欢使用注释配置而不是xml文件

1 个答案:

答案 0 :(得分:1)

您需要在枚举类中实现自定义JSON序列化方法 http://chrisjordan.ca/post/50865405944/custom-json-serialization-for-enums-using-jackson

在枚举中使用@JsonCreator,在nullundefined值上使用,只需返回null即可开始使用。

@JsonCreator
public static RequestType create(String value) {
    if(value == null) {
        return null;
    }
    for(RequestType v : values()) {
        if(value.equals(v.getName())) {
            return v;
        }
    }
    return null;
}