2016-11-16 3 views
0

Ich habe eine einfache Federauflage-Controller, der so aussieht.Spring Controller Enum Anfrage Validierung

@RestController 
public class MyController { 

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

Hier ist die MyModel-Klasse, die als Anforderungsparameter verwendet wird.

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

Jetzt, wenn ich versuche, diesen Endpunkt zu nennen einen ungültigen Wert für Request vorbei erhalte ich eine Ausnahme zurück:

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] 

Gibt es eine Möglichkeit, dass der Frühling die Enum auf null gesetzt würde, wenn falscher Wert übergeben und keinen Fehler werfen?

Ich bin mit Feder 4 und ich würde Konfiguration mit Anmerkungen und nicht die XML-Dateien

Antwort

1

Sie benötigen bevorzugen eine benutzerdefinierte JSON Serialisierung Methode in Ihrer Klasse Enum http://chrisjordan.ca/post/50865405944/custom-json-serialization-for-enums-using-jackson

Verwenden @JsonCreator in Ihrem Enum zu implementieren und auf null oder undefined Wert einfach zurück null, um loszulegen.

@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; 
} 
+0

Das funktioniert, danke – Tomas