SpringMVC常用注解和从前台取值方式详解

本文详细描述了SpringMVC的常用注解及从前台取值的各种方式,如有不到之处,请指正,如果不明白之处,欢迎留言。

package com.test.controller;

import java.util.Arrays;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

import com.test.entity.User;

@Controller
@SessionAttributes("user")
public class HelloWorldController {
	private static final String SUCCESS = "success";
	
	@RequestMapping(value="index")
	public String goIndex() {
		System.out.println("————————进入首页————————");
		return "index";
	}
	
	/*
	 * 使用method来限定请求方式
	 * @Author chengjunyu
	 * @date 2019-09-29 22:26:24
	 */
	@RequestMapping(value="/hello",method=RequestMethod.POST)
	public String hello() {
		System.out.println("Hello World");
		return SUCCESS;
	}
	
	/*
	 * 了解:可以使用params和headers来更加精确的映射请求,params和headers支持简单的表达式
	 * @Author chengjunyu
	 * @date 2019-09-29 22:25:35
	 */
	@RequestMapping(value="testParamsAndHeaders",params= {"name","age"},headers= {"Accept-Language=zh-CN,zh;q=0.9"})
	public String testParamsAndHeaders() {
		System.out.println("testParamsAndHeaders");
		return SUCCESS;
	}
	
	/*
	 * @RequestMapping支持ant风格的URL
	 * 	?:匹配文件名中的一个字符
	 * 	*:匹配文件名中的任意字符
	 *  **:匹配多层路径
	 * @Author chengjunyu
	 * @date 2019-09-29 22:25:35
	 */
	@RequestMapping("/testAntPath/**/abc??")
	public String testAntPath() {
		System.out.println("testAntPath");
		return SUCCESS;
	}
	
	/*
	 * @PathVairable 可以将URL中占位符参数绑定到控制器处理方法的入参中,只有一个参数时直接@PathVairable
	 * @PathVairable 使URL请求路径具有Restful风格
	 * @Author chengjunyu
	 * @date 2019-09-29 22:48:17
	 */
	@RequestMapping("/testPathVariable/{id}/{name}")
	public String testPathVariable(@PathVariable("id") Integer id,@PathVariable("name") String name) {
		System.out.println("testPathVariable---id:" + id);
		System.out.println("testPathVariable---name:" + name);
		return SUCCESS;
	}
	
	/*
	 * Rest: 即Representational State Transfer,资源表现层状态转化,是目前最流行的一种互联网软件架构。
	 * 		它结构清晰,符合标准,易于理解,扩展方便。
	 * 	
	 * GET:获取资源
	 * POST:新增资源
	 * PUT:更新资源
	 * DELETE:删除资源
	 * @Author chengjunyu
	 * @date 2019-09-29 23:06:52
	 */
	@GetMapping(value="/testRestful/{id}")
	public String testRestful(@PathVariable("id") Integer id) {
		System.out.println("testRest Get---id: " + id);
		return SUCCESS;
	}
	
	@PostMapping(value="/testRestful")
	public String testRestful() {
		System.out.println("testRest Post");
		return SUCCESS;
	}
	
	@RequestMapping(value="/testRestful/{id}", method=RequestMethod.PUT)
	public String testRestfulPut(@PathVariable("id") Integer id) {
		System.out.println("testRest Put---id: " + id);
		return SUCCESS;
	}
	
	@RequestMapping(value="/testRestful/{id}", method=RequestMethod.DELETE)
	public String testRestfulDelete(@PathVariable("id") Integer id) {
		System.out.println("testRest Delete---id: " + id);
		return SUCCESS;
	}
	
	/*
	 * @RequestParam 映射请求参数
	 * value:请求参数的参数名
	 * required:请求参数是否必须,默认为true
	 * defaultValue:请求参数的默认值
	 * @Author chengjunyu
	 * @date 2019-09-29 23:55:13
	 */
	@RequestMapping("/testRequestParam")
	public String testRequestParam(@RequestParam(value="id",required=false,defaultValue="10") Integer id, @RequestParam(value="name") String name) {
		System.out.println("testRequestParam---id: " + id);
		System.out.println("testRequestParam---name: " + name);
		return SUCCESS;
	}
	
	@RequestMapping("/testRequestNoParam")
	public String testRequestNoParam(Integer id, String name) {
		System.out.println("testRequestParam---id: " + id);
		System.out.println("testRequestParam---name: " + name);
		return SUCCESS;
	}
	
	/*
	 * @RequestParam 映射请求头信息
	 * value:请求头的名称
	 * @Author chengjunyu
	 * @date 2019-09-29 23:55:13
	 */
	@RequestMapping("/testRequestHeader")
	public String testRequestHeader(@RequestHeader(value="Accept") String accpet) {
		System.out.println("testRequestParam---Accept: " + accpet);
		return SUCCESS;
	}
	
	/*
	 * @CookieValue 可以让处理方法入参绑定请求中的cookie值
	 * @Author chengjunyu
	 * @date 2019-09-30 00:09:37
	 */
	@RequestMapping("/testCookieValue")
	public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
		System.out.println("testCookieValue---cookId: " + sessionId);
		return SUCCESS;
	}
	
	/*
	  *  使用Pojo对象作为参数,支持及联属性
	 * @Author chengjunyu
	 * @date 2019-09-30 00:30:37
	 */
	@RequestMapping(value="/testPojo", method=RequestMethod.POST)
	public String testPojo(User user) {
		System.out.println("testPojo: " + user);
		return SUCCESS;
	}
	
	
	/*
	 * SpringMVC 提供了以下几种方式输出模型数据:
	 * 1、ModelView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据
	 * 2、Map及Model:入参为Model、ModelMap、Map时,处理方法返回时,Map中的数据会自动添加到模型中
	 * 3、@SessionAttributes:将模型中的某个属性暂存到HttpSession中,以便多个请求可以共享该属性
	 * 4、@NodelAttributes:方法入参标注该注解后,入参的对象就会放到数据模型中
	 * @Author chengjunyu
	 * @date 2019-09-30 00:32:53
	 */
	@RequestMapping("/testModelAndView")
	public ModelAndView testModelAndView() {
		ModelAndView modelAndView = new ModelAndView(SUCCESS);
		modelAndView.addObject("name", "cheng");
		modelAndView.addObject("age", "22");
		Map<String, Object> name = modelAndView.getModel();
		System.out.println(name);
		return modelAndView;
	}
	
	/*
	  *  目标方法可以添加Map类型,实际也可以是Model或者ModelMap类型
	 * @Author chengjunyu
	 * @date 2019-09-30 00:58:12
	 */
	@RequestMapping("/testMap")
	public String testMap(Map<String, Object> map) {
		map.put("name", Arrays.asList("cheng","jun","yu"));
		map.put("age", "22");
		System.out.println("map: " + map);
		return SUCCESS;
	}
	
	@RequestMapping("/testModelMap")
	public String testModel(ModelMap modelMap) {
		modelMap.put("name", Arrays.asList("cheng","jun","yu"));
		modelMap.put("age", "22");
		System.out.println("modelMap: " + modelMap);
		return SUCCESS;
	}
	
	/*
	 * @SessionAttributes: 将查出来的数据存放在session中,可以在多个请求中共享,可通过@SessionAttributes()注解进行保存或
	 *  					根据request.getSession.setAttribute()进行保存操作,如果直接保存对象,前台通过${对象.属性}获取属性值,
	 *  					如果直接保存属性,前台直接通过${属性}获取属性值
	 * @Author chengjunyu
	 * @date 2019-09-30 01:20:10
	 */
	@RequestMapping("/testSessionAttribute")
	public String testSessionAttribute(HttpServletRequest request) {
		User user = new User();
		user.setName("cheng");
		user.setAge(25);
		request.getSession().setAttribute("user", user);
		request.getSession().setAttribute("name", user.getName());
		request.getSession().setAttribute("age", user.getAge());
		return SUCCESS;
	}
	
	@RequestMapping("/testSessionAttributes")
	public String testSessionAttributes(HttpServletRequest request) {
		User user = new User();
		user.setName("cheng");
		user.setAge(25);
		return SUCCESS;
	}
	
	/*
	 * @ModelAttribute先将数据从数据库中取出,再进行更新操作
	 * @Author chengjunyu
	 * @date 2019-09-30 01:54:02
	 */
	@RequestMapping("/testWithOutModelAttribute")
	public String testWithOutModelAttribute(User user) {
		System.out.println("修改后的用户信息为:" + user);
		return SUCCESS;
	}
	
	@ModelAttribute
	public void testModelAttribute(Integer id, Map<String, Object> map) {
		if(id != null) {
			User user = new User(1, "cheng", "123456", 15);
			System.out.println("数据库中的User信息:" + user);
            //注意,此处map的key值要和上面方法中的入参一样
			map.put("user", user);
		}
	}
	
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值