SpringMVCSpringMVC常用注解

Posted Summer-Zheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVCSpringMVC常用注解相关的知识,希望对你有一定的参考价值。

【1.@Controller】

       引用包:org.springframework.stereotype.Controller,使用Controller标识他是一个控制器

【2.@RequestMapping】

①实现对注解方法和url进行映射,一个方法对应一个URL,进行处理器映射使用

②实现窄化请求映射,在Controller类上加上RequestMapping注解,即可将该类下所有的URL路径归位配置的路径。③也可以限制请求方法,限制为get提交或post提交等

RequestMapping注解有六个属性:

  • value:指定请求的实际地址。
  • method:指定请求的method类型,GETPOST等。
  • consumes:指定处理请求的提交内容类型(Content-Type),例如application/jsontext/html
  • produces:指定返回的内容类型,当request请求头中的Accept类型中包含该指定类型才返回。
  • params:指定request中必须包含某些参数数值。
  • headers:指定request中必须包含某些指定的header值。

示例:

窄化请求映射:

/**
 * 商品的Controller
 * 
 * @author happy
 *
 */
@Controller
// 为了对URL进行分类管理,可以在这里定义根路径,最终访问的路径就是配置文件中的路径加上这里配置的路径再加上方法中的自路径
@RequestMapping("/items")
public class ItemsController 

限制请求方法:

// 打开修改 页面
@RequestMapping(value = "/editItems", method =  RequestMethod.POST,
		RequestMethod.GET )
public String editItems(Model model,
		@RequestParam(value = "id", required = true) Integer items_id)
		throws Exception 
	// 调用service根据商品ID查询商品信息
	ItemsCustom itemsCustom = itemsService.findItemsById(items_id);
	// 通过形参中的model,将model数据传到页面,相当于ModelAndView.addObject方法
	model.addAttribute("items", itemsCustom);
	return "items/editItems";

【3.@Autowired】

       可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。

@Autowired
private ItemsServiceitemsService;

【4.@RequestParam】

       常用于处理简单类型的绑定,主要用于在springmvc后台控制层获取参数。有三个常用参数:

  • value:请求参数名字,如value="item_id",表示请求的参数区中的名字为item_id的参数的值将传入;
  • defaultValue:表示设置默认值。
  • required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报错:Required Integer parameter'***'is not present

【5.@Validated】

        该注解用于springmvc的校验,和BindingResultbindingResult配对出现

Controller代码:

// 商品信息修改提交
// 在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult
// bindingResult接收校验出错信息
// 注意:@Validated和BindingResult BindingResult是配对出现的,并且形参顺序是固定的
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(
		Model model,
		HttpServletRequest request,
		Integer id,
		@ModelAttribute("items") @Validated(value =  ValidGroup1.class ) ItemsCustom itemsCustom,
		BindingResult bindingResult, MultipartFile items_pic)
		throws Exception 

	// 获取校验错误信息
	if (bindingResult.hasErrors()) 
		// 输出错误信息
		List<ObjectError> allErrors = bindingResult.getAllErrors();
		for (ObjectError objectError : allErrors) 
			// 输出错误信息
			System.out.println(objectError.getDefaultMessage());
		
		// 将错误信息传到页面
		model.addAttribute("allErrors", allErrors);

		// 可以直接使用model将提交pojo回显到页面
		model.addAttribute("items", itemsCustom);
		// 出错重新到商品修改页面
		return "items/editItems";
	

	// 调用service更新商品信息,页面徐亚将商品信息传导此方法
	itemsService.updateItems(id, itemsCustom);
	return "success";

【6.@ModelAttribute】

       用于不同的模型和控制器之间共享数据。当@ModelAttribute 标记在方法上的时候,该方法将在处理器方法执行之前执行,然后把返回的对象存放在 session 或模型属性中,属性名称可以使用@ModelAttribute(“attributeName”) 在标记方法的时候指定,若未指定,则使用返回类型的类名称(首字母小写)作为属性名称。

// 商品分类
	//itemtypes表示最终将方法返回值放在request中的key
	@ModelAttribute("itemtypes")
	public Map<String, String> getItemTypes() 

		Map<String, String> itemTypes = new HashMap<String, String>();
		itemTypes.put("101", "数码");
		itemTypes.put("102", "母婴");

		return itemTypes;
	

【7.@RequestBody@ResponseBody】

        @RequestBody接收的是一个Json对象的字符串,将json串转成java对象,

该注解常用来处理Content-Type:不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;

@ResponseBody是将json串转成Java对象

示例:

jsp代码:

<inputtype="button" οnclick="requestJson()"value="请求json,输出是json"/>

JS代码:

//请求json,输出是json
function requestJson()
	
	$.ajax(
		type:'post',
		url:'$pageContext.request.contextPath /requestJson.action',
		contentType:'application/json;charset=utf-8',
		//数据格式是json串,商品信息
		data:'"name":"手机","price":999',
		success:function(data)//返回json结果
			alert(data.name);
		
		
	);	

Controller代码:

// 请求json,输出json
// @RequestBody将请求的商品信息的json串转成itemsCustom对象
// @ResponseBody将itemsCustom转成json输出
@RequestMapping("/requestJson")
public @ResponseBody ItemsCustom requestJson(
		@RequestBody ItemsCustom itemsCustom) 
	return itemsCustom;

结果:


【9.@PathVariable】

        是用来获得请求url中的动态参数的。

示例:

// 查询商品信息,输出json
// 如果占位符中的名称和形参名一致,在@PathVariable可以不指定名称
@RequestMapping("/itemsView/id")
public @ResponseBody ItemsCustom itemsView(@PathVariable("id") Integer id)
		throws Exception 
	// 调用service查询商品信息
	ItemsCustom itemsCustom = itemsService.findItemsById(id);
	return itemsCustom;

【10.@Repository】

       用于dao层的注解,在dao的实现类daoImpl类上注解。

【11.@SessionAttributes】

       用于标记需要存放到session中的数据。

【12.@RequestHeader】

       用于把Request请求header部分的值绑定到方法的参数上。

       Request请求的header包含的信息有:有很多,这里就举个例子。

例如header包含Accept,可以指定客户端能够接受的内容类型。(示例: text/plain, text/html);还有host,可以指定请求的额服务器的域名和端口号(示例:localhost:8080  )。使用如下:

Publicvoid Test(@RequestHeader("Host")String url)

【13.@CookieValue】

       @CookieValue注解可以把RequestHeader中关于cookie的值,绑定到方法的参数上。(类似于@RequestHeader的用法)

以上是关于SpringMVCSpringMVC常用注解的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVCSpringMVC简介&第一个SpringMVC项目

SpringMVCSpringMVC简介&第一个SpringMVC项目

SpringMVCSpringMVC系列2之@RequestMapping 映射约束请求

springmvc中的newhashmap作用

基于注解的 Spring MVC(上)

SpringMVC概述+SpringMVC运行流程+SpringMVC搭建