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 {
   
}
posted @ 2022-10-03 14:13  酒剑仙*  阅读(32)  评论(0编辑  收藏  举报