2016-04-07 5 views
3
@RequestMapping("/form") 
public String form(Model model, Integer id) 

Zum Beispiel bekommt, Feder Parameter id Name wissen, ist id und Bindungsanforderung param der Wert, um es in RuntimeWie Frühling Parameternamen ohne Debug-Informationen

+1

Die Java-Compiler standardmäßig in Klassendateien Debug-Informationen enthalten. Daher kann die JVM Parameternamen zur Laufzeit ableiten. 'Integer id 'wird zur Laufzeit als' id 'gefunden. In dem seltenen Fall, dass der Code ohne Debug-Informationen kompiliert wurde, können Parameternamen als '@RequestParam (name =" id ") Integer id' angegeben werden. – manish

Antwort

1

Dies ist ein Merkmal von 8. Sie müssen eingeführt javac überprüfen -parameters Javac Befehlszeile Option, um sie zu aktivieren. Dann werden Sie in der Lage sein, um Parameternamen wie diese:

String name = String.class.getMethod("substring", int.class).getParameters()[0].getName() 
System.out.println(name); 

Von Frühling Dokumentation 3.3 Java 8 (as well as 6 and 7)

Sie können auch Java 8 Parameternamen Entdeckung verwenden (basierend auf dem -parameter Compiler-Flag) als Alternative zum Kompilieren Ihres Codes mit aktivierten Debug-Informationen.

Was ParameterNameDiscoverer Klasse im javadoc angegeben:

Parametername Entdeckung nicht immer möglich ist, sondern verschiedene Strategien zur Verfügung, um zu versuchen, wie für Debug-Informationen suchen, emittiert worden sein zur Kompilierzeit und Suche nach argname Anmerkungswerte, die optional mit aspectJ annotierten Methoden einhergehen.

Hier ist der Link zu verwandten JIRA Artikeln im Frühjahr Projekt Java 8 parameter name discovery for methods and constructors

JDK Enhancement Vorschlag JEP 118: Access to Parameter Names at Runtime

1

Es ist die WebDataBinder, der es für Sie tut.

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/WebDataBinder.html

Wie man auf dem api sehen können, ist WebDataBinder Daten zu JavaBean Objekte von Web-Anfrage Parameter binden.

WebDataBinder ist auch für die Validierung und Konvertierung verantwortlich, deshalb müssen Sie, wenn Sie einen benutzerdefinierten Editor oder Validator haben, diese im Controller wie unten beschrieben zu Ihrem webDataBinder hinzufügen.

 @Controller 
     public class HelloController { 

      @InitBinder 
      protected void initBinder(WebDataBinder binder) { 
       binder.setValidator(yourValidator); 
       binder.registerCustomEditor(the clazz to conver to.class, "the name of the parameter", yourEditor); 
      } 
    ... 

für weitere Informationen, haben Sie das Dokument in JDK

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

Verwandte Themen