SpringMVC中注解补充
一、@PostMapping注解
作用:指定当前发送请求的方式只可以是post请求
属性:和@RequestMapping中属性一致
代码实现:在登录的时候,提交到/login的时候,必须使用post方式提交
package com.augus.controller; import com.augus.pojo.User; import com.augus.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @Controller public class LoginController { @Autowired private UserService userService; @RequestMapping("toLogin") public String userLogin(){ return "login"; } @PostMapping("/login") public String login(User user, HttpServletRequest request){ //获取根据用户名 查询到的user对象 User user2 = userService.findByUserName(user.getUsername()); if(user2 != null && user2.getPassword().equals(user.getPassword())){ //如果byUserName不为空,输入的密码和数据库中保存的密码保持一致,则表示登录成功,就写出产品信息 HttpSession session = request.getSession();//将用户信息放到session域中 //将当前登录的user2对象放到session域中 session.setAttribute("loginUser", user2); return "redirect:/main"; } request.setAttribute("msg","账户或者密码错误!!!"); return "login"; } }
二、@GetMapping注解
作用:指定当前发送请求的方式只可以是get请求
属性:和@RequestMapping中属性一致
代码实现:在打开登录页面的时候规定只能使用get方式提交
package com.augus.controller; import com.augus.pojo.User; import com.augus.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @Controller public class LoginController { @Autowired private UserService userService;
//打开登录页面,固定使用get方式提交 @GetMapping("/toLogin") public String userLogin(){ return "login"; }
@PostMapping("/login") public String login(User user, HttpServletRequest request){ //获取根据用户名 查询到的user对象 User user2 = userService.findByUserName(user.getUsername()); if(user2 != null && user2.getPassword().equals(user.getPassword())){ //如果byUserName不为空,输入的密码和数据库中保存的密码保持一致,则表示登录成功,就写出产品信息 HttpSession session = request.getSession();//将用户信息放到session域中 //将当前登录的user2对象放到session域中 session.setAttribute("loginUser", user2); return "redirect:/main"; } request.setAttribute("msg","账户或者密码错误!!!"); return "login"; } }
三、@RestController注解
作用:书写到类上,代表该类中所有控制单元方法均是ajax响应 相当于@ResponseBody+@Controller
属性:其中的属性和@Controller中一样
代码实现:
@RestController public class LoginController { }
四、@JsonFormat注解
作用:处理响应json 数据的处理
属性:
- pattern :指定响应时间日期的格式
- Timezone:指定响应的时区,否则会有8个小时的时间差
代码实现:只需要处理实体类即可
package com.augus.pojo; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.Date; @AllArgsConstructor @NoArgsConstructor @Data public class Emp implements Serializable { private String name; @DateTimeFormat(pattern = "yyyy-MM-dd")//这个解决的入参的形式 @JsonFormat(pattern = "yyyy-MM-dd" ,timezone="Asia/Shanghai")//指定当前这个字段在转换给JSON字符串的时候格式,如果不指定将变成毫秒数 private Date hiredate; }
五、@RequestBody注解
作用:用于获取请求体json格式的字符串内容。直接使用得到是 key=value&key=value...结构的数据,get 请求方式不适用。
属性:required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。如果取值 为 false,get 请求得到是null。
controller代码如下:
/** * 打开页面 * @return */ @GetMapping("/hi") public String hi(){ return "success"; } @PostMapping(value = "/testRequestBody") @ResponseBody public Object testRequestBody(@RequestBody(required=false) User user){ System.out.println(user); return user; }
success.jsp如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js" type="text/javascript"></script> <script> $(function () { var jsonObj = {uid:"1",username:"admin",password:"123123"}; var jsonStr = JSON.stringify(jsonObj); $.ajax({ type:"post", url:"testRequestBody", contentType:"application/json", data:jsonStr, success:function (result) { console.log(result) } }) }) </script> </head> <body> <h1>访问成功</h1> </body> </html>
六、@CrossOrigin 注解
什么是跨域
出于浏览器的同源策略限制。同源策略(SameOriginPolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)
-
http://127.0.0.1:8080/augus/index.jsp基础
-
https://127.0.0.1:8080/augus/index.jsp 协议不一样
-
http://192.168.24.11:8080/augus/index.jsp IP不一致
-
http://127.0.0.1:8888/augus/index.jsp 端口不一致
-
http://localhost:8080/augus/index.jsp IP不一致
作用:解决ajax请求之间的跨域问题
属性:
-
origins : 允许可访问的域列表IP
-
maxAge:准备响应前的缓存持续的最大时间(以秒为单位)。
代码实现:
@CrossOrigin(origins = "http://www.augus.com", maxAge = 3600) @Controller public class forController { }