`
houniao
  • 浏览: 77104 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring mvc3提高生产力之——利用annotation使前后台数据交互更透明

阅读更多

这周花了点时间弄了一下spring mvc3,打算整理一个cheatsheet出来,方便后来者快速上手。


服务端数据到客户端
  1. 返回页面,Controller中方法返回String,String对应的是view的位置,如果需要携带数据通过model(相当于一个Map)传递到view, view中使用jstl的EL表达式来绑定model带来的数据。
    @RequestMapping(value="/getPojoView", method=RequestMethod.GET)
    public String getPojoView(Model model){
      Pojo pojo = new Pojo();
      pojo.setPojoName("testName");
      pojo.setPojoValue("testValue");
      model.addAttribute(pojo);
      return"sample/pojoView";
    }
    
     
  2. 返回Json对象,利用@ResponseBody来实现。
    @RequestMapping(value="/getPojoJson", method=RequestMethod.GET)
    public  @ResponseBody Pojo getPojoJson(){
      Pojo pojo = new Pojo();
      pojo.setPojoName("testName");
      pojo.setPojoValue("testValue");
    
      return pojo;
    }
    
      注:spring mvc自动将java对象转化成了json对象传回了客户端,返回对象可以是Pojo也可以是List

  3. 直接操作Response自己实现想要的效果。
    @RequestMapping(value="/getCustomResponse", method=RequestMethod.GET)
    public void getCustomResponse(HttpServletResponse response){
      //操作response...
    }
    
      注:response为spring根据方法的type类型注入的
客户端数据到服务端
  1. 通过URL传回参数:
    view
    <script type="text/javascript"src="jquery-1.4.min.js"></script>
    <h1>button与链接效果一致</h1>
    <a href="simple?name=text&age=28">simple</a><button onclick="simple()">simple</button><br/>
    <script type="text/javascript">
    function simple(){
      $.getJSON("simple",{"name":"nameJsonTest","age":"100"},function(){});
    }
    </script>
    <a href="list?names[]=aaaa&names[]=bbbb">list</a><button onclick="list()">list</button><br/>
    <script type="text/javascript">
    function list(){
      $.getJSON("list",{"names":["name1","name2","name3"]},function(){});
    }
    </script>
    <a href="pojo?pojo[pojoName]=hahaha&pojo[pojoValue]=kkkkkk">pojo</a><button onclick="pojo()">pojo</button><br/>
    <script type="text/javascript">
    function pojo(){
      $.getJSON("pojo",{"pojo":{"pojoName":"testName","pojoValue":"testValue"}},function(){});
    }
    </script>
    <a href="rest/10/2">rest</a><button onclick="rest()">rest</button><br/>
    <script type="text/javascript">
    function rest(){
      var pageSize = 20;
      var pageNo = 3;
      $.getJSON("rest/"+pageSize+"/"+pageNo,{},function(){});
    }
    </script> 
    controller
    package sample;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @Controller
    @RequestMapping(value="/urlparam")
    public class UrlParamController {
      @RequestMapping(value="/", method=RequestMethod.GET)
      public String index(){
        return"urlparam/index";
      }
     
      @RequestMapping(value="/simple", method=RequestMethod.GET)
      public void simple(@RequestParam String name, @RequestParam Integer age){
        System.out.println("name:"+name);
        System.out.println("age:"+age);
      }
    
      //list内不能放POJO对象
      @RequestMapping(value="/list", method=RequestMethod.GET)
      public void list(@RequestParam("names[]") String[] names){ 
      //也可以用List<String> names来接收
      for(String name : names){
        System.out.println("name:"+name);
      }
    }
    
      //单URL目前还不支持POJO对象,只能支持键值对,希望spring以后有所改善
      @RequestMapping(value="/pojo", method=RequestMethod.GET)
      public void pojo(@RequestParam("pojo[pojoName]") String name, @RequestParam("pojo[pojoValue]") String value){
        System.out.println("name:"+name);
        System.out.println("value:"+value);
      }
    
      @RequestMapping(value="/rest/{pageSize}/{pageNo}", method=RequestMethod.GET)
      public void rest(@PathVariable Integer pageSize, @PathVariable Integer pageNo){
        System.out.println("pageSize:"+pageSize);
        System.out.println("pageNo:"+pageNo);
      }
    } 

  2. 通过POST表单传回参数:
    方式同与url的是一致的,需要将method=RequestMethod.POST,不过有中文的话一般都用post来避免转码。一般ajax的时候用$.post而不能使用jQuery插件json的$.postJSON。下面会讲到。

  3.  通过使用jQuery插件json的$.postJSON传回参数:
    $.postJSON返回的是:application/json,
    $.post返回的是: application/x-www-form-urlencoded
    spring会将postJSON传回的json字符串转换成对象再将对象丢给带有@RequestBody的形参。
     由于json字符串直接转换为对象,所以@RequestBody只能接收一个对象还需要属性一一对应,不能多传参数。此方式可以传POJO,也可以传List<POJO>。
    $.postJSON('url', {"name":"testName","age":"28"},function(){});
    class Pojo{
      private Long id;
      private String name;
      private Integer age;
      //get,set...
    }
    @RequestMapping(value="pojo", method=RequestMethod.POST)
    publicvoid sentPojo(@RequestBody Pojo pojo){
      System.out.println(pojo.getPojoName());
      System.out.println(pojo.getPojoValue());
    }
    
      注:目前对于一对象,附带几个简单参数的解决办法是将简单参数通过为REST的url路径参数来传送。

  4.  直接拿到Request来操作:
    @RequestMapping(value="/", method=RequestMethod.GET)
      public String withRequest(HttpServletRequest request){
         //操作request...
       return"someview";
    }
     

以上controller内的方法的形参, 除了@RequestBody和@RequestParam不能同时声明外,都可以进行组合来满足各种需求。

 

小结:spring mvc3充分利用了annotation的好处将参数传递过程中的转换全部变为了透明,这样省去了程序员对参数进行一些无聊的转换,这肯定能提高不少效率。另一方面想说的是spring的@RequestBody还可以做的更好,如果能允许多个对象同时传送,那这个东西就十分好了。

分享到:
评论
6 楼 香烟与酒 2010-05-31  
最近在看这个spring3 mvc 的东西,就是在ajax/json 交互这块没有整明白. 
5 楼 icanfly 2010-05-31  
caoyangx 写道
springmvc的确非常不错,运行速度快,开发速度更快,不过在标签方面需要向前辈学习,springmvc的标签不是很丰富,希望能够继续完善。

我们都是用JSTL,没有用它自带的标签
4 楼 caoyangx 2010-05-31  
springmvc的确非常不错,运行速度快,开发速度更快,不过在标签方面需要向前辈学习,springmvc的标签不是很丰富,希望能够继续完善。
3 楼 laitaogood 2010-05-31  
除了annotation的支持之外,和原先的Spring MVC有什么区别吗?
给介绍介绍呗,想了解下,只用过之前版本的MVC,3.0的没用过。
2 楼 hjg1988 2010-05-31  
我最近也在用spring mvc 3做项目,确实非常好用
1 楼 ivan18248 2010-05-31  
学习了,期待下文。。

相关推荐

    Spring MVC Annotation验证的方法

    Spring MVC Annotation验证方法 Spring MVC 框架提供了多种验证方法,其中一种常用的方式是使用Annotation验证。本文将详细介绍 Spring MVC Annotation验证的方法,包括使用 Spring MVC 自带的 Annotation 验证和...

    spring mvc 初始环境搭建,前后台数据的交互,文件上传

    ### Spring MVC 初始环境搭建与应用实践 ...通过以上步骤,我们可以成功地搭建起Spring MVC的基础环境,并实现前后台的数据交互、文件上传等功能。这些基础知识对于深入学习Spring MVC框架至关重要。

    Spring MVC 教程快速入门 深入分析

    十三、如何给Spring3 MVC中的Action做JUnit单元测试:说明了如何对Spring MVC中的控制器进行单元测试,包括配置测试环境和编写测试代码。 十四、Spring MVC转发与重定向:详细讲解了在Spring MVC中如何使用转发和...

    Spring MVC IDEA版本DEMO

    在Spring MVC中,模型负责业务逻辑,视图负责展示数据,而控制器则协调模型和视图之间的交互。 创建Spring MVC项目的第一步是在IntelliJ IDEA中设置新项目。选择“New Project”,然后在“Project SDK”中选择Java...

    Annotation Based Spring MVC Basics

    Spring MVC提供了许多高级特性,如数据绑定、模型验证、类型转换、本地化支持等,使得开发更高效且可维护。通过学习和实践这些基础,开发者可以进一步探索Spring MVC的深度和广度,构建复杂的企业级Web应用。

    SpringMVC源码总结(二)mvc:mvc:annotation-driven背后的那些事

    在Spring MVC框架中,`mvc:annotation-driven`是Spring MVC配置中的一个重要元素,它使得我们的应用能够支持基于注解的控制器、数据绑定、格式化转换器和服务端验证等功能。这篇博客将深入探讨`mvc:annotation-...

    Spring MVC学习指南

    ### Spring MVC 学习指南详解 #### 一、Spring MVC 概述 Spring MVC 是 Spring 框架的一部分,主要用于构建...通过这一系列步骤,我们可以更好地理解 Spring MVC 如何帮助开发者构建高效且结构清晰的 Web 应用程序。

    spring mvc(整合了json)

    通过以上步骤,我们可以有效地在 Spring MVC 中整合 JSON,实现前后端的数据交互。这种集成使得 Web 应用能够更快速、更简洁地传递和处理数据,提高了开发效率和用户体验。在大型项目中,结合 RESTful API 设计原则...

    Spring 2.0 MVC的应用

    它遵循Model-View-Controller(MVC)设计模式,将业务逻辑、数据展示和用户交互分离,提高了代码的可维护性和可测试性。 2. **配置与环境搭建** 首先,我们需要在项目中引入Spring MVC的依赖,这通常通过Maven或...

    spring mvc

    DispatcherServlet 是 Spring MVC 中的核心组件之一,它作为前端控制器的角色,主要负责以下任务: - **初始化**:读取配置文件并初始化 Spring 容器。 - **请求处理**:处理所有进入系统的 HTTP 请求。 - **响应...

    Spring MVC入门教程

    十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八...

    Spring MVC REST Demo

    总结来说,"Spring MVC REST Demo"项目展示了如何在Spring MVC框架中利用REST原则创建Web服务。这包括定义Controller,标注HTTP方法,处理资源URI,以及进行数据交换。通过学习这个示例,开发者可以更好地理解和实践...

    Spring-MVC-3.0.rar_Java spring mvc_spring mvc_spring ppt

    Spring MVC将应用程序逻辑、用户界面和数据管理分离开来,提高了代码的可测试性和可维护性。 **核心组件** 1. **DispatcherServlet**:它是Spring MVC的入口点,负责接收HTTP请求,并根据配置将请求分发给相应的...

    Spring MVC整合Mybatis

    Spring MVC 和 Mybatis 的整合,使得业务逻辑和数据访问更加分离,提高了代码的可读性和可维护性。通过上述步骤,开发者可以构建出一套完整的Web应用框架,有效地管理数据库操作,实现高效的业务处理。同时,随着...

    Spring MVC + Hibernate +Annotation

    Spring MVC和Hibernate是Java开发中两个非常重要的框架,它们分别负责Web应用的模型-视图-控制器(MVC)架构和对象关系映射(ORM)。本教程将详细讲解如何将这两个框架结合使用,并通过注解简化配置过程。 首先,...

    Spring MVC internationalization annotation example

    Spring MVC internationalization annotation example 这个是annotation 方式的国际化 访问http://localhost:8080/login.htm

    Spring MVC异步模式

    在Spring MVC框架中,异步模式允许我们处理耗时的操作,如大数据处理、长时间的网络请求等,而不阻塞主线程。这种方式提高了系统的响应速度,改善了用户体验。本篇文章将深入探讨Spring MVC中的异步处理机制,以及...

    spring mvc的简单单元测试

    Spring MVC 是一个强大的Java web开发框架,用于构建可维护、可扩展的Web应用程序。单元测试是软件开发过程中不可或缺的一部分,它允许开发者独立地测试代码的各个部分,确保它们按照预期工作。Spring MVC 提供了对...

    Spring MVC框架实例

    - **Controller**: 处理业务逻辑,通常是一个实现了 `org.springframework.web.servlet.mvc.Controller` 或者 `org.springframework.web.bind.annotation.ControllerAdvice` 接口的类。 - **Model**: 表示应用程序的...

    4Spring自动装配——annotation resource方式

    在Spring框架中,自动装配(Auto-Wiring)是一种简化依赖注入(Dependency Injection,DI)配置的方式,它允许...通过阅读和理解源码,我们可以更好地掌握Spring自动装配的工作原理,从而更好地利用这一强大的功能。

Global site tag (gtag.js) - Google Analytics