2015-08-28 23 views
7

我有方法在我的控制器:如何RequestHeader轉換爲自定義對象在Spring

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

我可以寫一些自定義的轉換器或類似的東西這個RequestHeader用戶id PARAM轉換爲用戶對象,所以我的方法是:

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

是否可以使用spring-mvc?

+2

你用'@ RequestHeader'嘗試了註釋你的後一個方法參數嗎?然後只需在'User'中註冊一個'String'轉換器並完成。 –

+0

這取決於'userId'如何發佈到服務器。如果您可以將用戶對象作爲json/xml發佈,則可以使用'@ RequestBody'註釋。發佈的'User'對象將包含'userId',其他內容都可以爲空。 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody – RKodakandla

+0

@RKodakandla它應該發佈爲標題而不是json/xml。 –

回答

-1

控制器

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

查看

<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

我認爲這不是我所需要的。 –

-1

如果我理解你,你想接收一個參數,並將其轉換爲一個複雜的對象。

您必須定義一個自定義DataBinder進程實現PropertyEditorSupport並註冊此類型。

例如,如果你想獲得一個百度用戶表單ID創建類:

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

和註冊編輯器:

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

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

更多信息:

相關問題