Ich habe einen einfachen Controller mit einem GET-Handler, der ein Objekt akzeptiert, um Request-Parameter zu binden:
%Vor% Die RequestParams
ist eine einfache POJO-Klasse:
Alles funktioniert gut, aber ich möchte die Setter loswerden, um das Objekt für den öffentlichen Gebrauch unveränderlich zu machen. In der Dokumentation für @RequestMapping
handler-Methode, lesen wir das
Mögliche gültige Methodenargumente sind:
Befehls- oder Formularobjekte, um Anforderungs-Parameter an Bean-Eigenschaften zu binden (über Setter) oder direkt zu Feldern
Ist es möglich, die Standard-Spring-Boot-Konfiguration irgendwie zu überschreiben, so dass Request-Parameter über Reflektion an Klasseneigenschaften gebunden sind und nicht an Setter?
Spring Boot-Bibliotheken hängen von Jackson ab ( spring-boot-starter-web
& lt; - spring-boot-starter-json
& lt; - jackson libraries
), also kann man seine Anmerkungen verwenden, um json-Bindungen zu steuern.
@JsonCreator
-annotated Konstruktoren oder statische Methoden erlauben Objekte ohne explizite Setter zu instanziieren:
Dokumentation
Ich glaube nicht, dass Sie irgendeine Konfiguration im Springboot ändern müssen. Es scheint, dass der Spring-Container versucht, Werte unter Verwendung von Setter zu setzen, falls verfügbar, andernfalls verwendet er das Feld direkt. Können Sie also bitte den Umfang Ihrer Objekte in der RequestParam-Klasse in public ändern.
%Vor%Ich habe so etwas nicht benutzt, aber es scheint, es sollte funktionieren. Lassen Sie uns wissen, was passiert ist.
Tags und Links java spring spring-mvc spring-boot