Utilizzando Primavera 3.1 e dato questo genere di cose:Spring MVC ignora configurato PropertyEditor e usa costruttore invece
class Thing {
public Thing() {}
public Thing(String someProperty) {}
}
class ThingEditor extends PropertyEditorSupport{
@Override
public void setAsText(String text) {
if (text != null) {
Thing thing = new Thing(text); // or by using a setter method
setValue(thing);
}
}
}
class SomeController {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Thing.class, new ThingEditor());
}
}
ho scoperto che l'editor di proprietà registrato non era stato chiamato a meno che non ho tolto il costruttore che prende una stringa in Thing
- è giusto?
Perché sta facendo questo e ignorando l'editor registrato e come posso farlo smettere di farlo?
ti invitiamo a mostrare un po 'di più del metodo setAsText sopra. –
Aggiornato - ma il contenuto di questo metodo non è il problema - quando il debug non entrerà mai in questo metodo se la classe ha il costruttore String. – blank
Probabilmente perché stai inviando un campo con lo stesso nome di "someProperty", in questo caso potrebbe non chiamare il binder per creare l'oggetto "Thing", ma usando setter o il costruttore per impostare la proprietà. Potrebbe essere meglio inviare una proprietà per nome "cosa" e quindi per inserire esplicitamente un @RequestParam (..), questo potrebbe costringere il raccoglitore. –