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.
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
Da meine 'CustomDTO' sehr komplex ist, habe ich stattdessen' HandlerMethodArgumentResolver' implementiert. – user6947497