시리즈 (SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2)에서는 @RequestParam을 사용하여 데이터를 바인딩하는 방법을 소개했습니다. 다른 데이터 바인딩 주석을 사용하는 방법을 살펴보겠습니다.
SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.@PathVariable은 URL 템플릿 변수 값을 바인딩하는 데 사용됩니다. 이를 사용하는 방법은 시리즈 (SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2)에서 이미 소개했으므로 여기서는 자세히 설명하지 않겠습니다.
SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.@CookieValue는 쿠키에서 데이터를 바인딩하는 데 사용됩니다. 아래에서는 테스트를 위해 쿠키의 sessionId를 사용합니다.
DataBindController에 cookiebind 작업을 추가합니다. 코드는 다음과 같습니다.
//@CookieValue Test@RequestMapping(value="/cookiebind", method = {RequestMethod.GET})public String cookieBind(HttpServletRequest request, Model model, @CookieValue(value="JSESSIONID", defaultValue="") String jsessionId){ model.addAttribute("jsessionId", jsessionId); return "cookiebindresult"; }
Add cookiebindresult를 views 폴더 .jsp 보기, 코드는 다음과 같습니다.
nbsp;html PUBLIC "-//WSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2C//DTD HTML SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.0SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2 Transitional//EN" "http://www.wSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.org/TR/htmlSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2/loose.dtd"><meta><title>Insert title here</title> ${jsessionId}
테스트를 실행합니다.
볼 수 있습니다. sessionId를 얻었음을 의미합니다.
참고: @CookieValue에도 @RequestParam과 같은 SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2개의 매개변수가 있으며 그 의미는 @RequestParam 매개변수와 동일합니다.
SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.@RequestHeader는 요청 헤더에 데이터를 바인딩하는 데 사용됩니다. 데모를 위해 @RequestHeader를 사용하여 User-Agent를 가져옵니다.
DataBindController에 requestheaderbind 작업을 추가합니다. 코드는 다음과 같습니다. 다음:
//@RequestHeader Test@RequestMapping(value="/requestheaderbind", method = {RequestMethod.GET})public String requestHeaderBind(HttpServletRequest request, Model model, @RequestHeader(value="User-Agent", defaultValue="") String userAgent){ model.addAttribute("userAgent", userAgent); return "requestheaderbindresult"; }
views 폴더에 requestheaderbindresult.jsp 보기를 추가합니다. 코드는 다음과 같습니다:
nbsp;html PUBLIC "-//WSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2C//DTD HTML SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.0SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2 Transitional//EN" "http://www.wSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.org/TR/htmlSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2/loose.dtd"><meta><title>Insert title here</title> ${userAgent}
테스트 실행:
User-Agent가 획득된 것을 확인할 수 있습니다.
참고: @RequestHeader에도 @RequestParam과 같은 SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2개의 매개변수가 있으며 그 의미는 @RequestParam 매개변수와 동일합니다.
SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.@ModelAttribute는 데이터를 모델에 바인딩합니다. 시리즈 (SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2)의 modelAutoBind 액션에서 양식을 통해 제출된 데이터를 모델에 추가하는 코드는 다음과 같습니다.
@RequestMapping(value="/modelautobind", method = {RequestMethod.POST})public String modelAutoBind(HttpServletRequest request, Model model, AccountModel accountModel){ model.addAttribute("accountmodel", accountModel); return "modelautobindresult"; }
@ModelAttribute의 도움으로 더 많은 작업을 수행할 수 있습니다. 간단히 In Model에 데이터를 추가하고 위 코드를 다음과 같이 수정합니다.
@RequestMapping(value="/modelautobind", method = {RequestMethod.POST})public String modelAutoBind(HttpServletRequest request, @ModelAttribute("accountmodel") AccountModel accountModel){ return "modelautobindresult"; }
테스트를 실행합니다.
바인딩이 여전히 성공했습니다. 데이터를 제출했습니다.
SpringMVC 학습 시리즈(5) 데이터 바인딩-2. Model의 데이터 범위는 요청 수준입니다. 즉, 하나의 요청 요청에서 다른 요청 요청에서 요청한 모델의 데이터를 얻을 수 없습니다. 그러나 @SessionAttributes를 사용하면 세션에 데이터를 저장하여 여러 요청 간에 데이터를 유지할 수 있으므로 양식 제출과 같은 요구 사항을 단계적으로 구현할 수 있습니다. SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2단계로 AccountModel에 데이터를 바인딩하는 방법을 살펴보겠습니다.
在DataBindController上添加:
@SessionAttributes(value = "sessionaccountmodel")
在DataBindController添加usernamebind和passwordbind action,代码如下:
//@SessionAttributes Test@ModelAttribute("sessionaccountmodel")public AccountModel initAccountModel(){ return new AccountModel(); } @RequestMapping(value="/usernamebind", method = {RequestMethod.GET})public String userNameBind( Model model, AccountModel accountModel){ model.addAttribute("sessionaccountmodel", new AccountModel()); return "usernamebind"; } @RequestMapping(value="/usernamebind", method = {RequestMethod.POST})public String userNameBindPost( @ModelAttribute("sessionaccountmodel") AccountModel accountModel){ //重定向到密码绑定测试 return "redirect:passwordbind"; } @RequestMapping(value="/passwordbind", method = {RequestMethod.GET})public String passwordBind(@ModelAttribute("sessionaccountmodel") AccountModel accountModel){ return "passwordbind"; } @RequestMapping(value="/passwordbind", method = {RequestMethod.POST})public String passwordBindPost(@ModelAttribute("sessionaccountmodel") AccountModel accountModel, SessionStatus status){ //销毁@SessionAttributes存储的对象 status.setComplete(); //显示绑定结果 return "sessionmodelbindresult"; }
由于我们在controller上指定了@SessionAttributes,所以在@ModelAttribute(“xxx”)注解的参数会直接在@SessionAttributes中查找名为”xxx”的对象,如果没有找到则调用@ModelAttribute(“xxx”)注解的方法返回对象并存入@SessionAttributes(如果没有找到且没有@ModelAttribute(“xxx”)注解的方法就会抛出HttpSessionRequiredException)。当执行到最后一步就可以调用SessionStatus .setComplete()方法把@SessionAttributes中保存对象销毁了(不会清除HttpSession中的数据)。
在views文件夹中添加usernamebind.jsp、passwordbind.jsp和sessionmodelbindresult.jsp视图内容分别如下:
nbsp;html PUBLIC "-//WSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2C//DTD HTML SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.0SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2 Transitional//EN" "http://www.wSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.org/TR/htmlSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2/loose.dtd"><meta><title>Insert title here</title> <form> 用户名:<input><br> <input> </form>
nbsp;html PUBLIC "-//WSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2C//DTD HTML SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.0SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2 Transitional//EN" "http://www.wSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.org/TR/htmlSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2/loose.dtd"><meta><title>Insert title here</title> <form> 密 码:<password></password><br> <input> </form>
nbsp;html PUBLIC "-//WSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2C//DTD HTML SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.0SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2 Transitional//EN" "http://www.wSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.org/TR/htmlSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2/loose.dtd"><meta><title>Insert title here</title> 用户名:${sessionaccountmodel.username}<br> 密 码:${sessionaccountmodel.password}
运行测试:
可以看到我们已经成功的分SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2步把数据绑定到AccountModel中了。
注:
@SessionAttributes有value和types两个参数其中value指明要对象的名称,types指定要绑定对象的类型,如@SessionAttributes(value = "sessionaccountmodel", types=AccountModel.class)两者是and关系,需要同时满足。也可以同时指定多个value和types 如:@SessionAttributes(value = {"aa", "aa"} , types={XXX.class, YYY.class}) 。
SpringMVC 학습 시리즈(5) 데이터 바인딩-2.@RequestBody 调用合适的MessageConvert来把非application/x-www-form-urlencoded请求中的内容转换为指定的对象它通常与@ResponseBody合用,@ResponseBody与.@RequestBody刚好相反,他把指定的对象转换为合适的内容(请求头为Accept:application/json 则返回json数据)并返回。这里我们用一个ajax请求做演示:
由于Spring默认解析json用的是Jackson,所以我们这里要把jackson-core-asl-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.9.SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.jar和jackson-mapper-asl-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.9.SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.jar两个包添加到我们项目。
修改AccountModel让其继承Serializable接口,并添加一个空的构造函数(为了Jackson做转换)。
在DataBindController添加requestBodyBindaction,代码如下:
//@RequestBody Test@RequestMapping(value="/requestbodybind", method = {RequestMethod.GET})public String requestBodyBind(Model model){ model.addAttribute("accountmodel", new AccountModel()); return "requestbodybind"; } @RequestMapping(value="/requestbodybind", method = {RequestMethod.POST})public @ResponseBody AccountModel requestBodyBind(@RequestBody AccountModel accountModel){ return accountModel; }
在views文件夹中添加requestbodybind.jsp视图内容如下:
nbsp;html PUBLIC "-//WSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2C//DTD HTML SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.0SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2 Transitional//EN" "http://www.wSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.org/TR/htmlSpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2/loose.dtd"><script></script><meta><title>Insert title here</title> <form> 用户名:<input><br> 密 码:<password></password><br> <input> </form> <script> $(function() { $("#submit").click(function() { var postdata = &#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;{"username":"&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29; + $(&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;#username&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;).val() + &#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;","password":"&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29; + $(&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;#password&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;).val() + &#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;"}&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;; $.ajax({ type : &#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;POST&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;, contentType : &#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;application/json&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;, url : &#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;http://www.php.cn/:8080/SpringMVCLesson/databind/requestbodybind&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;, processData : false, dataType : &#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;json&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;, data : postdata, success : function(data) { alert(&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;username : &#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;+data.username+&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;\npassword : &#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;+data.password); }, error : function() { alert(&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;error...&#SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-29;); } }); }); }); </script>
运行测试:
결과가 정확하여 변환이 성공했음을 증명합니다.
SpringMVC 학습 시리즈(5) 데이터 바인딩-2.@RequestPart는 "multipart/form-data" 유형 데이터를 바인딩하고 javax.servlet.http.Part 파일 업로드를 지원하며 유형 변환을 수행할 수 있습니다. 자세한 내용은 공식 문서를 참조하세요.
http://docs.spring.io/spring-framework/docs/SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.x/spring-framework-reference/htmlsingle/#new-in-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2.SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2-mvc-requestpart
위 내용은 SpringMVC 학습시리즈 (SpringMVC 학습 시리즈(5) 데이터 바인딩-2) Data Binding 내용-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!