2015-08-28 15 views
7

ho metodo in mio controller:Come convertire RequestHeader per oggetto personalizzato in primavera

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

Posso scrivere qualche convertitore personalizzato o qualcosa di simile per convertire questo RequestHeader userId param per oggetto User quindi il mio metodo sarà :

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

E 'possibile fare con spring-mvc?

+2

Avete provato l'annotazione sul vostro secondo argomento del metodo con '@ RequestHeader'? Quindi, basta registrare un convertitore per 'String' su' User' ed essere fatto. –

+0

Dipende da come 'userId' è pubblicato sul server. Se puoi postare l'oggetto utente come json/xml, puoi usare l'annotazione '@ RequestBody'. L'oggetto 'Utente' pubblicato conterrà' userId' e tutto il resto può essere vuoto. http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody – RKodakandla

+0

@RKodakandla Dovrebbe essere pubblicato come intestazione non json/xml. –

risposta

-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(); 
} 

View

<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

Penso che non sia quello di cui ho bisogno. –

-1

se ho capito, si desidera ricevere un parametro e convertirlo in un oggetto complesso.

È necessario definire un processo personalizzato DataBinder che implementa PropertyEditorSupport e registrarlo per un tipo.

Ad esempio, se si desidera ottenere un bd utente form id creare la classe:

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); 
     } 
    } 
... 
} 

e registrare redattore:

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

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

Maggiori informazioni:

Problemi correlati