详细的描述了Spring中的SSM整合深入

SSM整合深入

表现层与前端数据协议

  • 前端接收数据格式—创建结果模型类,封装数据到data属性中(操作的结果)

  • 前端接收数据格式—封装操作结果到code属性中(操作的结果:true还是false)

  • 前端接收数据格式—封装特殊消息到message(msg)属性中(给用户看的)

综上,设计一个统一数据返回结果类

public class Result {
private Object data;
private Integer code;
private String msg;
}

Result类中的字段并不是固定的,可以根据需要自行增减提供若干个构造方法,方便操作

针对Code也可以设计一个返回结果编码类

package com.wang.controller;

public class Code {
public static final Integer SAVE_OK = 20011;
public static final Integer DELETE_OK = 20021;
public static final Integer UPDATE_OK = 20031;
public static final Integer GET_OK = 20041;

public static final Integer SAVE_ERR = 20010;
public static final Integer DELETE_ERR = 20020;
public static final Integer UPDATE_ERR = 20030;
public static final Integer GET_ERR = 20040;
}

SSM异常处理器

  • 出现异常现象的常见位置与常见诱因如下:
    • 框架内部抛出的异常:因使用不合规导致
    • 数据层抛出的异常:因外部服务器故障导致(例如:服务器访问超时)
    • 业务层抛出的异常:因业务逻辑书写错误导致(例如:遍历业务书写操作,导致索引异常等)
    • 表现层抛出的异常:因数据收集、校验等规则导致(例如:不匹配的数据类型间导致异常)
    • 工具类抛出的异常:因工具类书写不严谨不够健壮导致(例如:必要释放的连接长期未释放等)

问题如下

1.各个层级均出现异常,异常处理代码书写在哪一层?

==所有的异常均抛出到表现层进行处理== 向上抛到表现层

2.表现层处理异常,每个方法中单独书写,代码书写量巨大且意义不强,如何解决?

AOP思想

实现代码与杂项4-项目中的全局异常处理器相同:

/**
* 全局异常处理器
*/

@RestControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(Exception.class) //捕获所有的异常
public Result ex(Exception ex) {
ex.printStackTrace();
return Result.error("对不起,操作失败,请联系管理员");
}
}