springMVC之常用注解

  •  
  • RequestMapping请求映射方式

 

1.规则

  1. @RequestMapping可以设置在类上,也可以设置在方法上
  2. 请求的映射规则是:类上的RequestMapping + ‘/’+ 方法上的RequestMapping
  3. 如果没有写 / ,SpringMVC会自动补全
  4. 类上的RequestMapping可以省略,这时直接用方法的RequestMapping访问
  5. 路径不可重复

 

2. @RequestMapping的两种映射规则

1)@RequestMapping在用于方法上

@Controller

public class HelloWorldSpringMvc{

    private static final String SUCCESS = “success”;


    @RequestMapping(“/hello”)

    public String testHelloWorld(){

    System.out.pringln(“Hello World!”)

    return SUCCESS;

    }  

}

  浏览器访问路径:http://localhost:9898/hello 成功跳转到success页面

 

2)@RequestMapping在用于类上

@Controller

@RequestMapping(“springmvc”)

public class HelloWorldSpringMvc{

    private static final String SUCCESS = “success”;


    @RequestMapping(“/hello”)

    public String testHelloWorld(){

    System.out.pringln(“Hello World!”)

    return SUCCESS;

    }  

}

如果后面没有配置路径则还是和原来配置在方法上面一样同过访问http://localhost:9898/hello能够成功跳转success页面,

这里配置了/springmvc如果还是访问原路径怎会报找不到页面。

 

正确访问的地址应该为http://localhost:9898/springmvc/hello

 

2. springMVC之其他映射请求

1)Ant风格,其实就是通配符映射,有以下3种方式:

    ? 匹配一个字符,如/hello? 可以陪陪/hello1,但是不能购匹配/hello或/hello12

    *  匹配一个或者多个字符,如/hello/*,可以匹配/hello/demo,但是不能匹配/hello/hello/demo

    ** 匹配零个或多个路径,如 /hello/**,可以匹配/hello/demo或/hello/hello/demo

@Controller

@RequestMapping(“springmvc”)

public class HelloWorldSpringMvc{

    private static final String SUCCESS = “success”;

   

    @RequestMapping(“/hello/**”)

    public String testHelloWorld(){

    System.out.pringln(“Hello World!”)

    return SUCCESS;

    }  

}

http://localhost:9898/springmvc/hello/hello

2)占位符映射@RequestMapping(value="/users/{userId}")

@RequestMapping(value="/users/{userId}") :

其中{xxx}占位符, 请求的 URL 可以是 “/users/123456”或“/users/abcd”,

通过@PathVariable 可以提取 URI 模板模式中的{xxx}中的xxx变量。

@Controller

@RequestMapping(“springmvc”)

public class HelloWorldSpringMvc{

    private static final String SUCCESS = “success”;

   

    @RequestMapping(“/hello/{userId}”)

    public ModelAndView testHelloWorld(@PathVariable(“userId”)Long userId){

    ModelAndView mv = new ModelAndView(SUCCESS);

    mv.addObject(“msg”, “占位符映射 userId:” + userId);

    return mv;

    }  

}

如果url没有userId或者userId类型不对会报错。

3)请求方式限定@RequestMapping(value=“/hello”,method=RequestMethod.POST)

已经限定为POST请求如果其他请求则会报错

@Controller

@RequestMapping(“springmvc”)

public class HelloWorldSpringMvc{

    private static final String SUCCESS = “success”;

   

    @RequestMapping(value=“/hello”,method=RequestMethod.POST)

    public ModelAndView testHelloWorld(){

    ModelAndView mv = new ModelAndView(SUCCESS);

    mv.addObject(“msg”, “这里是POST请求!”);

    return mv;
    
    }  

}

 

4)请求参数限定@RequestMapping(value=“/hello”,param={“userid”})

       通过@RequestMapping注解的params属性来对请求的参数进行限定:

       例如@RequestMapping(value=“/hello”,param={“userid”})

       要求请求的参数中必须带有userId参数。

       参数的限制规则如下:

       Params=”userId” 请求参数中必须包含userid

       Params=”!userId” 请求参数中不能包含userId

       Params=“userId!=1“ 请求参数中必须包含userId,但是userId的值不能为1

       Params={“userId“,”name”} 请求参数中必须包含userId和name 参数

@Controller

@RequestMapping(“springmvc”)

public class HelloWorldSpringMvc{

    private static final String SUCCESS = “success”;

   

    @RequestMapping(value=“/hello”,params=“userId”)

    public ModelAndView testHelloWorld((@RequestParam(“userId”)Long userId){

    ModelAndView mv = new ModelAndView(SUCCESS);

    mv.addObject(“msg”, “userId:” + userId);

    return mv;

    }  

}

5)@ModelAttribute注解

    ①可以用来修饰方法会在被修饰的目标方法前先被springMVC调用。

    ②可以用来修饰目标方法中的对象参数,springMVC会使用对象参数中的value属性值在implicitModel中查找对应的对象,如果该对象存在,该对象就会被直接传入到目标方法的对象参数中;springMVC会以对象参数的value为key,参数对象为value存入到request中。

6)接收JSON格式请求

    @ResponseBody 是把返回值的Pojo对象变为JSON字符串,称为序列化

    

/**
 * 将查询或处理或其他操作完成后的对象以json格式返回到前台
 *
@RequestMapping("/testJson")
@ResponseBody
public List<User> getAllUsers(){
    return xxxxxxDao.getAllUsers();
}
  1. 当SpringMVC读取到方法上的@ResponseBody注解时,就知道该方法不再使用默认的视图解析器解析视图,而是直接把结果写到响应体中,这样就需要对结果进行转换。
  2. SpringMVC会从框架中查找有没有定义MessageConvertor(消息转换器),通过消息转换器转换结果,返回对应视图
  3. 在SpringMVC的注解驱动类中,会进行默认的消息转换器注册,因为我们引入了jacksonJson包,所以会注册JSON的消息转换器
  4. 因为只有JSON消息转换器可以对Java对象序列化,因此这里默认用了JSON转换

注解驱动类中的代码:

 

    @RequestBody 是把接收到的JSON字符串变为Pojo对象,称为反序列化

/**
 *将前台传过来的JSON数据转换为Java对象
 *
 */
@RequestMapping("testJsonn")
public void  testJson(@RequestBody()List<user> users){
    //todo 对传入的对象进行处理
}

7)@ResponseStatus注解

该注解是springMVCrestful风格的页面响应样式

@ResponseStatus(reason="测试",value=HttpStatus.NOT_FOUND)
@RequestMapping("/testResponseStatus")
public String testResponseStatus(){
		
	//内部代码完全执行成功即本方法正常执行无任何异常
		
	return "success";
}

 如图虽然代码内部完全正常执行但是响应的时候会呈现如下页面

 8)@InitBinder注解

@InitBinder注解只对@Controller方法有效,在controlller方法中通过表单传过来的对象被它初始化绑定到 WebDataBinder中

在表单传过来的的数据初始化时可以干掉你不想要的值。

例如:不想要页面传来的lastName值

@InitBinder
public void initBinder(WebDataBinder binder){
	binder.setDisallowedFields("lastName");
}

 

 

 

lastName被在initBinder方法中被干掉了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值