SpringMVC学习笔记

SpringMVC底层基于Servlet

1. 环境问题

tomcat和JDK版本不匹配时,会出现很多奇奇怪怪的bug,,所以,得使用匹配的JDK版本。Tomcat10以前用的javax,不是Jakarta

javax.servlet是jdk8以及以前的版本原生的api
 


2.RequestMapping注解不允许重复

Controller类中在方法上加上RequestMapping注解不允许重复。也可以在类上加上统一路径。


3.Controller类中的方法需要传参方法

Controller类中的方法需要传参时,通过访问地址栏加上?传参形式。RequestMapping有value和请求方法两个值。后面有使用到Restful风格来编写地址映射


4.springMVC接收客户端的请求的五种类型

1.普通参数

2.对象参数

3.嵌套对象参数

4.数组参数

5.集合普通参数

1. 普通参数:若地址栏传递的参数名称和Controller方法中的形参名称不一致,可以通过在方法参数前面加上RequestParam注解来绑定参数,还可以在后面设置是否必须传递该参数。

2. 在Controller类中的方法上若传递的参数为一个对象,则只需要在地址栏中传递的参数和对象中成员属性方法对上即可。若控制类中,有其它类的对象作为成员属性,则再传递参数时,用对象.成员属性的方式来传递。

4. 直接传递多个参数即可。参数名称与方法中形参参数名称相同即可。若使用List集合来接收,需要加上注解RequestParam

接收json数据:

 

 以Map接收:参数和上面差不多,就是改为Map<String,Object> mapParam;

List不能接收键值对。


5.@RestController注解

在Controller类上加上RestController注解表示该类下所有方法返回json数据。


6.获取到HttpServletRequest

可以通过SpringMVC来获取到HttpServletRequest,它是自动缓存到ThreadLocal里面的。

@RequestMapping("/demo05")
    @ResponseBody
    public String demo05(@RequestBody UserEntity user){  //该注解@RequestBody挺好理解的。和RequestParam差不多一个意思
        HttpServletRequest httpServletRequest = ((ServletRequestAttributes) (RequestContextHolder.getRequestAttributes())).getRequest();
        System.out.println(httpServletRequest);
        return user.toString();
    }

7.restful风格

查询使用get请求,新增数据使用post请求,更新操作使用put请求,删除操作使用delete请求。


8.RequestMapping注解

第一个参数value为映射地址,第二个参数为请求方法,若不写第二个参数,则默认为所有都行。

@RequestMapping(value = "/user/{id}",method = RequestMethod.DELETE)
    public void deleteUser(@PathVariable(name = "id") String id){
        System.out.println("delete"+id);
    }

这样可实现同一个路径通过不同的请求方式来实现不同的功能。

也可用GetMapping、DeleteMapping等特定的注解方式来映射路径。如:


9.接口统一返回规范

package com.lzx.controller;

import java.util.HashMap;


public class BaseController {
    /**
     * 提供处理请求响应成功的情况下
     *
     * @param data
     * @return
     */
    public HashMap<String, Object> setResultOk(Object data) {
        return setResult(200, "ok", data);
    }

    public HashMap<String, Object> setResultSuccess(String msg) {
        return setResult(200, msg, null);
    }


    /**
     * 提供处理请求失败情况下
     *
     * @param msg
     * @return
     */
    public HashMap<String, Object> setResultError(String msg) {
        return setResult(500, msg, null);
    }

    /**
     * @param code code 200 处理成功 500 处理失败
     * @param msg  响应错误内容
     * @param data 响应的数据
     * @return
     */
    public HashMap<String, Object> setResult(Integer code, String msg, Object data) {
        HashMap<String, Object> result = new HashMap<>();
        result.put("code", code);
        result.put("msg", msg);
        result.put("data", data);
        return result;
    }
}

返回JSON数据格式,

{

        "code":200,

        "msg":"ok",

        "data":{

}

}

在controller层里面添加一个方法专门用来格式化该响应结果。


10.SpringMVC全局捕获异常

package com.lzx.controller;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;

/**
 * @author 梁志雄
 * @Goal Mercedes-Benz C260
 * @date 2023/8/15 15:45
 */
@ControllerAdvice  //加上该注解表示该类为全局捕获异常类
public class GlobalExceptionHandler extends BaseController {

    @ResponseBody
    @ExceptionHandler(value = Exception.class)  //表示拦截所有异常
    public HashMap<String,Object> handleException(Exception exception){
        System.out.println("自定义异常"+exception.getMessage());
        return setResultError("系统发生了错误");
    }
}

11. 引入jquery的CDN

src="https://code.jquery.com/jquery-1.12.4.js"
        integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU="
        crossorigin="anonymous
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay/.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值