Eu costumava pensar que o imobiliário era fornecido pelo SpringMVC, mas hoje descobri que isso foi fornecido pelo JDK, o que é incrível!
O que isso pode fazer? Você pode converter uma string em um objeto de feijão. O MVC da Spring usa essa coisa quando o formulário de mapeamento para o objeto de parâmetro do controlador.
Veja um exemplo:
Nodedo.java: um objeto Javabean padrão
public classe Nodedo {private String Name; Private String email; data privada Data; public String getName () {Return Name;} public void SetName (Nome da String) {this.name = name;} public string getemail () {return email;} public void setEmail (email) {this.email = email;} setdate; {this.date = date;}@string stringpublic string tostring () {return "nodedo [name =" + name + ", email =" + email + ", date =" + dodedoeditor.sdf.format (date) + "]";}}Como o testdo.java, nodedo é referenciado:
classe pública testndo {private string nodename; Privado Nodedo Nodedo; public string getNodename () {return nodename; } public void setNodename (string nodename) {this.nodename = nodename; } public Nodedo getNodedo () {return nodedo; } public void setNodedo (nodedo nodedo) {this.nodedo = nodedo; }}Queremos implementar uma função como esta:
public static void main (string [] args) lança exceção {map <string, string> parameters = new hashmap <string, string> () {{put ("nodename", "xiaopang test"); put ("Nodedo", "xiaopang|[email protected]|2015-10-20 12:00:00"); }}; Testdo testdo = convert (parâmetros); System.out.println (testdo.getnodename ()); System.out.println (testdo.getNodedo ()); } Como converter parâmetros mapeados em objeto testdo?
(1) Primeiro, você precisa definir um imóvel usado para converter a propriedade:
classe pública DODEDOEDITOR estende PropertyEditorsupport {public static final SimpleDateFormat sdf = new SimpleDateFormat ("AAAA-MM-DD HH: MM: SS"); @Override public void SeterStexT (texto da string) lança ilegalArgumentException {String [] tokens = text.split ("// |"); Nodedo nodedo = new nodedo (); Nodedo.setName (tokens [0]); Nodedo.setemAil (tokens [1]); tente {Nodedo.setDate (sdf.parse (tokens [2])); } catch (parseException e) {lança nova ilegalArgumentException (e); } setValue (Nodedo); }}(2) converter:
classe pública imobiliária AMpler {static {propertyDitorManager.ReGisterEDitor (Nodedo.class, DODEDOEDITOR.CLASS); } public static void main (string [] args) lança Exceção {map <string, string> parâmetros = new hashmap <string, string> () {{put ("nodename", "xiaopang test"); put ("Nodedo", "xiaopang|[email protected]|2015-10-20 12:00:00"); }}; Testdo testdo = convert (parâmetros); System.out.println (testdo.getnodename ()); System.out.println (testdo.getNodedo ()); } Testdo estático privado convert (map <string, string> parâmetros) lança a exceção {testdo testdo = new testdo (); Beaninfo bi = introspector.getbeaninfo (testdo.class); PropertyDescriptor [] PDS = bi.getPropertyDescriptors (); for (PropertyDescriptor PD: PDS) {classe <?> PropertyType = pd.getPropertype (); Método writeMethod = pd.getWritemethod (); if (PropertyType == Class.class) {// ignore} else if (PropertyType == String.class) {writemethod.invoke (testdo, parameters.get (pd.getName ())); } else {Propertyeditor editor = propertyDitormanager.finDitor (PropertyType); if (editor! = null) {editor.SeSetastext (parâmetros.get (pd.getName ())); writemethod.invoke (testdo, editor.getValue ()); } else {System.out.println ("Nenhum editor para:"+pd.getName ()); }} retornar testdo; }}}De fato, existem apenas dois pontos -chave
<pré -nome = "code"> editor.SetSastext (parameters.get (pd.getName ())); // 1 editor.getValue (); // 2 // Portanto, geralmente o setValue () é chamado no SeterStext para salvar o valor convertido, para que você possa obtê -lo através do getValue ()
O exposto acima é todo o conteúdo compilado desta vez. Se você ainda tem algo que não entende, pode deixar uma mensagem abaixo para discutir. Obrigado pelo seu apoio ao wulin.com.