? ? ? ? ? ? 用户发起请求,
? ? ? ? ? ?SpringMVC接受请求,
? ? ? ? ?SpringMVC加载静态资源问题说明?
请求过去了,但没有处理
? ? ? ? ? ? ? ? 规则说明:静态资源进入SpringMVC框架之后,没有找到要怎样处理静态资源的方法,所以他们就不解决,也就不显示
? ? ? ? ? ? ? ? 解决方法:SpringMVC基于Servlet处理器机制,放行静态资源,交给Servlet处理
<!-- 5.放行静态资源-->
<mvc:default-servlet-handler/>
? ?说明:? 使用AOP解决? ? 环绕通知?
? ? ?try-catch的位置:? 首选Controller层,? ? 因为Dao和Service层抛出后,最终层还是在Controller层处理
基于注解? ?全局异常处理
@ControllerAdvice? 拦截Controllre层异常
@ExceptionHandler({RunTimeException.class})拦截什么类型的异常
Result包装类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private Integer code;
private String msg;
private Object data;
public static Result fail(){
return new Result(201,"业务调用失败",null);
}
public static Result success(){
return new Result(200,"业务调用成功",null);
}
public static Result success(Object obj){
return new Result(200,"业务调用正确",obj);
}
}
@ExceptionHandler 拦截什么异常
? ? @ExceptionHandler(RuntimeException.class)前后端调用时,异常的JSON串返回
//springmvc基于aop拦截Controller中的异常信息
@ControllerAdvice
public class ExceptionAOP {
// //拦截什么异常
// @ExceptionHandler({RuntimeException.class})
// public String exception(){
// System.out.println("全局异常处理机制工作");
// return "error";
//
// }
//前后端调用时,异常的JSON串返回
@ExceptionHandler(RuntimeException.class)
public Result exception(){
return Result.fail();
}
? ?
? ? ?创建项目
? ? 引入axios
? ? ?创建Axios请求对象
delete和get请求格式一致
put和post请求格式一致
? ? ? ?发起Ajax请求
? ? ? ?引入jar包??jackson
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
? ? ?
? ? ? ?解决跨域问题? ?
? ? ? 核心注解: @CrossOrigin
??
原始接收请求实在是太麻烦? ,后面有用注解简化
/**
* 思考:
* 1. 前端JS发起请求
* 2. 后端服务器java代码实现请求
* 3. 前后端交互使用JSON串
* 4. 获取用户对象进行返回
*/
@RequestMapping("/getMsg")
public void getMsg(int id,String name,HttpServletResponse response) throws IOException {
System.out.println("获取客户端数据:"+id+":"+name);
ObjectMapper objectMapper = new ObjectMapper();
User user = new User("admin","123456");
String json = objectMapper.writeValueAsString(user);
response.getWriter().write(json);
}
@RequestBody
主要接收Ajax? ?post请求
作用:将请求体里面的JSON串转化为java对象
注解写在参数当中
注意事项:json串中的属性名称,必须与对象中的属性名称一致
//如何获取请求体中的数据 JSON串 > java对象
@PostMapping("/login")
public User login(@RequestBody User user) throws IOException {
System.out.println(user);
user.setUsername("success!!!!");
return user;
}
@ResponseBody?
? ? ? ? 将方法的返回值自动转化为JSON串
? ? ? ?如果该注解标识在类上, 表示当前类中的所有方法 都按照JSON返回.
/**
* SpringMVC 为了简化Ajax调用方式
* 1.@RequestBody 将请求体中的json串 转化为Java对象
* 2.@ResposeBody 将Java对象转化为JSON串返回
*/
@RequestMapping("/getMsg2")
//@ResponseBody
public User getMsg2(int id,String name) throws IOException {
System.out.println("获取参数:"+id+":"+name);
return new User("zhangsan","123456");
}
1.RestController 是ResponseBody和Controller注解的结合注解
当前类中的所有的方法按照JSON串返回
//@ResponseBody ? //当前类中的所有方法 都按照JSON串返回
@RestController
前后端调用时,异常的json串返回
2.RestControllerAdvice是@ResponseBody和@ExceptionHandler的结合注解
?全局异常处理机制中的
//springmvc基于aop拦截Controller中的异常信息
@ControllerAdvice
public class ExceptionAOP {
// //拦截什么异常
// @ExceptionHandler({RuntimeException.class})
// public String exception(){
// System.out.println("全局异常处理机制工作");
// return "error";
//
// }
//前后端调用时,异常的JSON串返回
@ExceptionHandler(RuntimeException.class)
public Result exception(){
return Result.fail();
}
package com.atguigu.controller;
import com.atguigu.pojo.User;
import com.atguigu.vo.Result;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
//@Controller
@RequestMapping("/ajax")
//当前的所有的请求支持跨域访问!!!
//@CrossOrigin(value = "指定发起请求的网址是谁!!!")
@CrossOrigin
//@ResponseBody //当前类中的所有方法 都按照JSON串返回
@RestController
public class AjaxController {
/**
* 思考:
* 1. 前端JS发起请求
* 2. 后端服务器java代码实现请求
* 3. 前后端交互使用JSON串
* 4. 获取用户对象进行返回
*/
@RequestMapping("/getMsg")
public void getMsg(int id,String name,HttpServletResponse response) throws IOException {
System.out.println("获取客户端数据:"+id+":"+name);
ObjectMapper objectMapper = new ObjectMapper();
User user = new User("admin","123456");
String json = objectMapper.writeValueAsString(user);
response.getWriter().write(json);
}
/**
* SpringMVC 为了简化Ajax调用方式
* 1.@RequestBody 将请求体中的json串 转化为Java对象
* 2.@ResposeBody 将Java对象转化为JSON串返回
*/
@RequestMapping("/getMsg2")
//@ResponseBody
public User getMsg2(int id,String name) throws IOException {
System.out.println("获取参数:"+id+":"+name);
return new User("zhangsan","123456");
}
//如何获取请求体中的数据 JSON串 > java对象
@PostMapping("/login")
public User login(@RequestBody User user) throws IOException {
System.out.println(user);
user.setUsername("success!!!!");
return user;
}
/**
* BufferedReader reader = request.getReader();
* String data = null;
* StringBuffer sbf = new StringBuffer();
* while (StringUtils.hasLength(data=reader.readLine())){
* sbf.append(data);
* }
* String json = sbf.toString();
* ObjectMapper objectMapper = new ObjectMapper();
* objectMapper.readValue(json,XXXX.class);
*/
@GetMapping("/getResult")
public Result getResult(){
User user = new User("zhangsan","123456");
int a = 1/0;
return Result.success(user);
}
}
??????????
? ? ? ? ? ??