2017-10-14 2 views
0

Ich brauche ein paar Zeichen von BenutzereingabenErsetzen String über Java Frühling Annotation

Ist ist möglich, declare Anmerkung für Änderungswert nach Satz zu ersetzen oder zu entfernen?

zum Beispiel, ich habe UserDTO Klasse mit Benutzernamen Feld. Ich möchte Unicode-Zeichen ändern.

Bitte beachten Sie, dass ich Spring Data + Web Service

@PostMapping("/register") 
public RestResult register(@Valid @RequestBody UserDTO userDTO){ 
    ... 
} 
+0

Sie möchten einen benutzerdefinierten Deserializer für das UserDTO verwenden. – shinjw

+1

Überprüfen Sie dies: https://www.mkyong.com/spring-mvc/how-to-register-a-servlet-filter-in-spring-mvc/ – Shadov

+0

@Shadov Thx, es möglich, aber weniger auf Klassen. Ich möchte dies für eine Klasse mit Annotation für Feld oder Klassenebene tun – Hamid

Antwort

1

Es gibt zwei Ansätze für diese Verwendung.

Sie können den Setter für das Objekt Benutzername schreiben, um diese Logik zu verarbeiten. Der Nachteil davon ist, dass jeder User-Wert, der durch deinen Setter weitergegeben wird, durch deine String-Massage geht.

public class UserDTO implements Serializable { 
    @JsonProperty("username") 
    private String username; 

    public void setUsername(String username) { 
     this.username = username.replace("A", "B"); 
    } 

    public String getUsername() { 
     return this.username; 
    } 
} 

Eine andere Möglichkeit, dies zu tun, ist durch die @JsonCreator Annotation von Jackson bereitgestellt wird.

Sie müssen daran denken, dass dies die Deserialisierungsstrategie für alle Objekte wird, die das Objekt UserDTO verwenden. Aber wenn man bedenkt, dass Sie Unicode auslagern möchten (höchstwahrscheinlich zu einem internen lesbaren Format), würde ich mir vorstellen, dass dies zu Ihrem Anwendungsfall passt.

Also, wenn in Ihrer Methode durchlaufen, wird "ABC" zu "BBC" auflösen. Dies kann in Ihrem Fall der bevorzugte Ansatz sein, da es Ihnen die Flexibilität gibt, das Objekt bei Bedarf anzupassen, ohne Ihren Benutzernamen String Reinigung zu durchlaufen. Objekte, die durch Serialisierung und Konstruktor erstellt wurden, durchlaufen die Bereinigung, aber der Setter nimmt den Wert wie er ist. Es ist einfach, Bit für Logik in Getter und Setter zu bekommen.

+0

vielen dank für die vollständige antwort. Aber ist es möglich, benutzerdefinierte Annotation für Klasse oder Feld zu schreiben? – Hamid

+0

Sprechen Sie über ein zusätzliches Verhalten, das die annotierte Feldmethode oder -klasse ausführen würde? – shinjw

+0

nicht für jetzt. Ich denke, sogar Jackson Custom Deserializer ist eine gute Lösung für mich. Irgendwie mag ich Annotation, die Frühling und Winterschlaf mit ihnen – Hamid

Verwandte Themen