2015-08-28 16 views
7

tôi có phương pháp trong điều khiển của tôi:Làm thế nào để chuyển đổi RequestHeader để đối tượng tùy chỉnh trong mùa xuân

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

Tôi có thể viết một số chuyển đổi tùy chỉnh hoặc một cái gì đó như thế để chuyển đổi RequestHeader userId này param để đối tượng tài khoản vì vậy phương pháp của tôi sẽ là :

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

Có thể làm gì với spring-mvc không?

+2

Bạn đã thử chú thích đối số phương thức sau với '@ RequestHeader' chưa? Sau đó, chỉ cần đăng ký một trình biến đổi cho 'String' thành' User' và được thực hiện. –

+0

Nó phụ thuộc vào cách 'userId' được đăng lên máy chủ. Nếu bạn có thể đăng đối tượng người dùng dưới dạng json/xml, bạn có thể sử dụng chú thích '@ RequestBody'. Đối tượng 'User' được đăng sẽ chứa' userId' và mọi thứ khác có thể rỗng. http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody – RKodakandla

+0

@RKodakandla Nó sẽ được đăng dưới dạng tiêu đề không phải là json/xml. –

Trả lời

-1

khiển

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

Xem

<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

Tôi nghĩ rằng đó không phải là những gì tôi cần. –

-1

nếu tôi hiểu bạn, bạn muốn nhận một tham số và chuyển nó sang một đối tượng phức tạp.

Bạn phải xác định quy trình DataBinder tùy chỉnh triển khai PropertyEditorSupport và đăng ký loại này.

Ví dụ, nếu bạn muốn có được một bd dùng form id tạo lớp:

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

và đăng ký biên tập:

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

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

Thông tin thêm:

Các vấn đề liên quan