2015-08-28 13 views
7

Ich habe Methode in meinem Controller konvertieren:Wie Request, um benutzerdefiniertes Objekt in Spring

@RequestMapping(method = RequestMethod.POST) 
public CustomObject createCustomObject(final @RequestHeader("userId") Long userId) { 
    ... 
} 

Kann ich schreibe einige benutzerdefinierten Konverter oder so ähnlich diesen Request userId param auf dem Benutzerobjekt zu konvertieren, so meine Methode sein wird, :

@RequestMapping(method = RequestMethod.POST) 
public CustomObject createCustomObject(final User user) { 
    ... 
} 

Ist es möglich, mit Feder-mvc zu tun?

+2

Haben Sie Annotation Ihre letzte Methode Argument mit '@ RequestHeader' versucht? Dann einfach einen Konverter für "String" auf "User" registrieren und fertig sein. –

+0

Es hängt davon ab, wie 'userId' auf dem Server veröffentlicht wird. Wenn Sie das Benutzerobjekt als json/xml posten können, können Sie die Annotation "@ RequestBody" verwenden. Das "User" -Objekt wird die 'userId' enthalten und alles andere kann leer sein. http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody – RKodakandla

+0

@RKodakandla Es sollte als Header nicht json/xml gepostet werden. –

Antwort

-1

-Controller

@RequestMapping(value = "/addAnswer", method = RequestMethod.POST) 
    public String addAnswer(Answer answer,ModelMap model,HttpServletRequest request) { 
     quizService.addAnswer(answer); 
     model.addAttribute("answerList",quizService.getAllAnswers()); 
     return "answers"; 
}  

@ModelAttribute("answer") 
public Answer createAnswerModel() { 
    return new Answer(); 
} 

Ansicht

<form:form method="POST" commandName="answer" action="${pageContext.request.contextPath}/admin/addAnswer" accept-charset="UTF-8"> 
     <fieldset> 
       <label for="answerText"></label><form:textarea path="answerText" cssStyle="width:100%" /> 
       <input type="submit" value="Submit" class="btn-primary" /> 
     </fieldset> 
</form:form> 
+0

Ich denke, es ist nicht das, was ich brauche. –

-1

, wenn ich Sie verstehen, wollen Sie einen Parameter empfangen und sie zu einem komplexen Objekt zu konvertieren.

Sie müssen einen benutzerdefinierten DataBinder-Prozess definieren, der PropertyEditorSupport implementiert und diesen für einen Typ registriert.

Zum Beispiel, wenn Sie eine bd Benutzerformular-ID erstellen, die Klasse zu erhalten:

public class UserEditor extends PropertyEditorSupport { 

    private final UserDAO userDao; 

    public <T> CacheEditor(UserDAO userDao) { 

     this.userDao = userDao; 
    } 

    @Override 
    public void setAsText(String text) throws IllegalArgumentException { 

     if (text != null && !text.isEmpty()) { 
      Long code = Long.parseLong(text); 
      setValue(userDao.getById(code)); 
     } else { 
      setValue(null); 
     } 
    } 
... 
} 

und registriert Editor:

@Controller 
public class MyFormController { 
    @Autowire 
    private UserDAO userDao; 

    @InitBinder 
    public void initBinder(WebDataBinder binder) {   
     binder.registerCustomEditor(User.class, new UserEditor(userDao)); 
    } 
.... 

Weitere Informationen:

Verwandte Themen