您的位置:首页 > 编程语言 > Java开发

Spring MVC注解

2016-01-14 20:35 323 查看
spring mvc(1):请求地址映射(@RequestMapping)


@RequestMapping 参数说明

value

定义处理方法的请求的 URL 地址。

method

定义处理方法的 http method 类型,如 GET、POST 等。

params

定义请求的 URL 中必须包含的参数。

headers

定义请求中 Request Headers 必须包含的参数。


@RequestMapping 的用法

@RequestMapping 有两种标注方式,一种是标注在类级别上,一种是标注在方法级别上。

标注在方法上时,value 表示访问该方法的 URL 地址。标注在类上时,value 相当于一个命名空间,即访问该 Controller 下的任一方法都需

要带上这个命名空间。

ExampleController.java

@Controller

@RequestMapping("/example")

public class ExampleController {

@RequestMapping

public String execute(){

return "example_page";

}

@RequestMapping("/todo")

public String doSomething(){

return "example_todo_page";

}

}
/example.action

执行的是 execute() 方法。execute() 方法的 @RequestMapping 注解缺省 value 值,在这种情况下,当访问命名空间时默认执行的是这个

方法。方法级别上的 @RequestMapping 标注是必须的,否则方法无法被正确访问。

/example/todo.action

执行的是 doSomething() 方法。类级别上的 @RequestMapping 标注不是必须的,在不写的情况下,方法上定义的 URL 都是绝对地址,否则,

方法上定义的 URL 都是相对于它所在的 Controller 的。


@RequestMapping(method)

指定 method 的值

@RequestMapping(value = "/register", method = RequestMethod.GET)

public String register(){

return "example_register_page";

}
method 的值一旦指定,那么,处理方法就只对指定的 http method 类型的请求进行处理。

@RequestMapping(value = "/register", method = RequestMethod.GET)

public String register1(){

return "example_register_get_page";

}

@RequestMapping(value = "/register", method = RequestMethod.POST)

public String register2(){

return "example_register_post_page";

}
可以为多个方法映射相同的 URI,不同的 http method 类型,Spring MVC 根据请求的 method 类型是可以区分开这些方法的。

当 /example/register.action 是以 GET 的方式提交的时候,Spring MVC 调用 register1() 来处理请求;若是以 POST 的方式提交,

则调 register2() 来处理提交的请求。

缺省 method 的值

@RequestMapping("/enter")

public String enter(){

return "example_enter_page";

}
method 若是缺省没指定,并不是说它默认只处理 GET 方式的请求,而是它可以处理任何方式的 http method 类型的请求。

指定 method 是为了细化映射 ( 缩小处理方法的映射范围 ),在 method 没有指定的情况下,它的映射范围是最大的。


@RequestMapping(params)

与 method 相类似,作用是为了细化映射。只有当 URL 中包含与 params 值相匹配的参数的请求,处理方法才会被调用。

@RequestMapping(value = "/find", params = "target")

public String find1(){

return "example_find1_page";

}

@RequestMapping(value = "/find", params = "!target")

public String find2(){

return "example_find2_page";

}

@RequestMapping(value = "/search", params = "target=product")

public String search1(){

return "example_search1_page";

}

@RequestMapping(value = "/search", params = "target!=product")

public String search2(){

return "example_search2_page";

}
find1()

请求的 URL 中必须要有 target 参数,才能够到达此方法。如 /example/find.action?target 或 /example/find.action?target=x 等

find2()

请求的 URL 中必须不能有 target 参数,才能够到达此方法。如 /example/find.action 或 /example/find.action?q=x 等

search1()

请求的 URL 中必须要有 target=product 参数,才能够到达此方法。如 /example/search.action?target=product 等

search2()

请求的 URL 中必须不能有 target=product 参数,才能够到达此方法。如 /example/search.action?target=article 等


@RequestMapping(headers)

headers 的作用也是用于细化映射。只有当请求的 Request Headers 中包含与 heanders 值相匹配的参数,处理方法才会被调用。

@RequestMapping(value = "/specify", headers = "accept=text/*")

public String specify(){

return "example_specify_page";

}
请求的 Request Headers 中 Accept 的值必须匹配 text/* ( 如 text/html ),方法才会被调用。

@ModelAttribute

@ModelAttribute("user") User user

这样前台页面提交请求并附带user相关参数,会把参数赋值给这个user对象

同时这个user对象也可以带回到前台页面

页面可以用el表达式来读取






@RequestParam


在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取。这里主要讲这个注解

一、基本使用,获取提交的参数

后端代码:

Java代码


@RequestMapping("testRequestParam")

public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) {

System.out.println(inputStr);

int inputInt = Integer.valueOf(request.getParameter("inputInt"));

System.out.println(inputInt);

// ......省略

return "index";

}

前端代码:

Html代码


<form action="/gadget/testRequestParam" method="post">

参数inputStr:<input type="text" name="inputStr">

参数intputInt:<input type="text" name="inputInt">

</form>

前端界面:



执行结果:

test1

123

可以看到spring会自动根据参数名字封装进入,我们可以直接拿这个参数名来用

二、各种异常情况处理

1、可以对传入参数指定参数名

Java代码


@RequestParam String inputStr

// 下面的对传入参数指定为aa,如果前端不传aa参数名,会报错

@RequestParam(value="aa") String inputStr

错误信息:

HTTP Status 400 - Required String parameter 'aa' is not present

2、可以通过required=false或者true来要求@RequestParam配置的前端参数是否一定要传

Java代码


// required=false表示不传的话,会给参数赋值为null,required=true就是必须要有

@RequestMapping("testRequestParam")

public String filesUpload(@RequestParam(value="aa", required=true) String inputStr, HttpServletRequest request)

3、如果用@RequestMapping注解的参数是int基本类型,但是required=false,这时如果不传参数值会报错,因为不传值,会赋值为null给int,这个不可以

Java代码


@RequestMapping("testRequestParam")

public String filesUpload(@RequestParam(value="aa", required=true) String inputStr,

@RequestParam(value="inputInt", required=false) int inputInt

,HttpServletRequest request) {

// ......省略

return "index";

}

解决方法:

“Consider declaring it as object wrapper for the corresponding
primitive type.”建议使用包装类型代替基本类型,如使用“Integer”代替“int”

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: