Ich muss eine UUID-Instanz über HTTP-Anforderungsparameter übergeben. Spring benötigt einen benutzerdefinierten Typkonverter (aus String), der registriert werden soll. Wie registriere ich mich?Wie registriere ich einen benutzerdefinierten Typkonverter im Frühling?
Antwort
Nicht sicher, was Sie fragen?
Der Frühling kommt mit einem CustomEditorConfigurer, um benutzerdefinierte Zeichenfolge < -> Objektkonverter zu liefern.
Um dies zu verwenden, fügen Sie den CustomEditorConfigurer als Bean zu Ihrer Konfiguration hinzu und fügen Sie die benutzerdefinierten Konverter hinzu. Diese Konverter werden jedoch normalerweise verwendet, wenn String-Attribute in der Konfigurationsdatei in reale Objekte konvertiert werden.
Wenn Sie Spring MVC verwenden, dann nehmen Sie einen Blick auf den Abschnitt über annotated MVC
Insbesondere haben einen Blick auf die @RequestParam und den @ModelAttribute Anmerkungen?
Hoffe das hilft?
finden Sie im Kapitel 5 des Federreferenzhandbuch hier: 5.4.2.1. Registering additional custom PropertyEditors
Ich habe eine MVC-Controller mit RequestMapping Anmerkungen. Eine Methode hat einen Parameter vom Typ UUID. Dank Toolkit, nach etwa WebDataBinder lesen, dachte ich, dass ich eine Methode, wie dies in meinem Controller benötigen:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(UUID.class, new UUIDEditor());
}
UUIDEditor einfach erweitert PropertyEditorSupport und überschreibt getAsText() und setAsText().
Arbeitete für mich nett.
In Erweiterung zu dem vorherigen Beispiel.
Controller-Klasse
@Controller
@RequestMapping("/showuuid.html")
public class ShowUUIDController
{
@InitBinder
public void initBinder(WebDataBinder binder)
{
binder.registerCustomEditor(UUID.class, new UUIDEditor());
}
public String showuuidHandler (@RequestParam("id") UUID id, Model model)
{
model.addAttribute ("id", id) ;
return "showuuid" ;
}
}
Property de-munger
class UUIDEditor extends java.beans.PropertyEditorSupport
{
@Override
public String getAsText()
{
UUID u = (UUID) getValue() ;
return u.toString() ;
}
@Override
public void setAsText (String s)
{
setValue (UUID.fromString (s)) ;
}
}