>  기사  >  Java  >  SpringMVC 학습 시리즈(5) 데이터 바인딩-2

SpringMVC 학습 시리즈(5) 데이터 바인딩-2

黄舟
黄舟원래의
2017-03-03 10:54:541446검색

시리즈 (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}


테스트를 실행합니다.

SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2

볼 수 있습니다. 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}


테스트 실행:

SpringMVC 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2

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 학습 시리즈(SpringMVC 학습 시리즈(5) 데이터 바인딩-2) 데이터 바인딩-2

바인딩이 여전히 성공했습니다. 데이터를 제출했습니다.

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

SpringMVC 학습 시리즈(5) 데이터 바인딩-2

SpringMVC 학습 시리즈(5) 데이터 바인딩-2

可以看到我们已经成功的分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

결과가 정확하여 변환이 성공했음을 증명합니다.

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)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.