2016-10-10 1 views
0

Nach der Frühjahrs Dokumentation können Sie alle GET Parameter in einer Karte erhalten wie folgt:Java Frühling konvertieren ganze GET Anfrage an Kundenspezifische DTO

@GetMapping 
public final ReturnType getAll(@RequestParam MultiValueMap<String, String> allRequestParams) { 
    ... 
} 

Ist es möglich (und wie) auch eine benutzerdefinierte Java zu akzeptieren Objekt stattdessen (für die eine benutzerdefinierte Converter existiert über Unterklassen GenericConverter) in einer Weise, dass der Konverter die gesamte Anforderungskarte für die Konstruktion von seinem DTO-Objekt bekommt?

@GetMapping 
public final ReturnType getAll(@RequestParam CustomDTO customObj) { 
    [...] 
} 

[...] 

@Component 
public class CustomDTOConverter implements GenericConverter { 

    @Override 
    public Set<ConvertiblePair> getConvertibleTypes() { 
     // Allow MultiValueMap.class to CustomDTO.class 
     [...] 
    } 

    @Override 
    public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { 

     final MultiValueMap<String, String> requestMap = (MultiValueMap<String, String>) source; 
     // Construct CustomDTO from the requestMap 
    } 
} 

Der Versuch, das obige Snippet wird fehlschlagen, beschweren, dass es keine Parameter customObj vorhanden.

Antwort

0

Zum Konvertieren von Parametern in Java-Objekt verwenden Methodenparameter ohne Anmerkungen. CustomDto muss über Setter verfügen.

@GetMapping 
public final ReturnType getAll(CustomDTO customObj) { 
    ... 
} 

class CustomDto { 
    int x; 
    String s; 

    public void setX(int x) { 
     this.x = x; 
    } 

    public void setS(String s) { 
     this.s = s; 
    } 
} 

URL Beispiel: http://example.com/test?x=123&s=abc

+0

Vielen Dank für Ihre Antwort! Hast du es selbst ausprobiert? Leider scheint es für mich nicht zu funktionieren, da der Konverter überhaupt nicht aufgerufen wird und das 'customObj' mit 'Null'-Werten gefüllt ist. – user6947497

+0

Da meine 'CustomDTO' sehr komplex ist, habe ich stattdessen' HandlerMethodArgumentResolver' implementiert. – user6947497