`
guoyiqi
  • 浏览: 969425 次
社区版块
存档分类
最新评论

spring mvc3 annotation例子

 
阅读更多

服务端数据到客户端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还可以做的更好,如果能允许多个对象同时传送,那这个东西就十分好了。

文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/3_program/java/javajs/20100719/455857.html

分享到:
评论

相关推荐

    springweb3.0MVC注解(附实例)

    &lt;display-name&gt;Spring Annotation MVC Sample &lt;!-- Spring 服务层的配置文件 --&gt; &lt;param-name&gt;contextConfigLocation &lt;param-value&gt;classpath:applicationContext.xml &lt;!-- Spring 容器启动监听器 --&gt; ...

    Spring MVC3 REST实例

    使用Spring MVC3基于注解的形式实现的REST小例子 部署运行: 1. 将工程导入eclipse 2. 添加tomcat属性 工程(右键)——&gt; tomcat project——&gt; update context 3. 启动tomcat 4. 在浏览器中输入...

    spring_MVC源码

    本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,现在这一篇补上。下面开始贴代码。 文中用的框架版本:spring 3,hibernate 3,没有的,自己上网下。 先说...

    SpringMVC-Annotation

    一个简单的例子,SPringMVC最常用的开发模式,通过注解的方式配置一个控制器和请求!

    spring3.0 mvc使用入门,含具体例子

    在spring3.0mvc中最大的特点就是采用了rest,它利用annotation来完全替代配置文件,直接用注释将请求映射到具体的model进行处理,然后返回结果给jsp页面,操作很简单。

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    Spring中文帮助文档

    2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态...

    Spring API

    2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态...

    springMVC+annotation

    spring mvc 注解的一个小例子·····················

    轻量级java web MVC框架

    一个非常简单的MVC框架,实现了类似Spring MVC的基本功能。 1、包括自动扫描绑定映射路径,只要在web.xml中指定扫描包,系统启动后会将请求url绑定到指定的处理方法上。如: 在web.xml中定义如下: &lt;param-name&gt;...

    springmybatis

    mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in ...

    java微信公众号MVC开发框架

    jwx是开源的java公众号开发MVC框架,基于spring配置文件和微信消息或事件注解,通过微信上下文处理一个或多个微信公众号服务请求。目的主要有两个,其一生封装微信请求xml消息为java实体对象,将返回对象转换为xml...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

Global site tag (gtag.js) - Google Analytics