后端基础总结
- 参数校验
- 异常处理
- 系统日志
参数校验
使用
@Validated
// 1. 加上校验规则@Data
public class User {private Long userId;@NotNull@Length(min = 2, max = 10)private String userName;
}
// 2. 使用@Validated注解@PostMapping("/saveUser")
public Result saveUser(@RequestBody @Validated User user) {// 校验通过,才会执行业务逻辑处理return Result.ok();
}
异常处理
使用
@ControllerAdvice
注解的类,可以捕获全局的异常。
在Springboot中,我们一般使用@ControllerAdvice(注解类) + @ExceptionHandler(注解方法)
的方式处理全局异常
For example
- 情况一:处理全局的空指针异常
// 可以使用@ControllerAdvice注解类 + @ExceptionHandler(value =NullPointerException.class) 注解方法@RestControllerAdvice
public class GlobalExceptionHandler {/*** 处理空指针的异常* @param req* @param e* @return*/@ExceptionHandler(value =NullPointerException.class)public BaseResponseFacade exceptionHandler(HttpServletRequest req, NullPointerException e){log.error("发生空指针异常!原因是:",e);return ResponseUtil.error(ResponseCode.ERROR);}
}
- 情况二:我想捕获处理全局的空指针异常,并且捕获自定义的异常
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;/*** @Description 自定义异常*/
@Data
@AllArgsConstructor
@Accessors(chain = true)
public class BizException extends RuntimeException {/*** 错误码*/protected Integer errorCode;/*** 错误信息*/protected String errorMsg;
}
// @ControllerAdvice注解类 + @ExceptionHandler(value = BizException.class) 注解方法// @ExceptionHandler 可以注解我们自定义的方法@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {/*** 处理自定义的业务异常* @param req* @param e* @return*/@ExceptionHandler(value = BizException.class)public BaseResponseFacade bizExceptionHandler(HttpServletRequest req, BizException e){log.error("发生业务异常!原因是:{}",e.getErrorMsg());return ResponseUtil.error(e.getErrorCode(),e.getErrorMsg());}/*** 处理空指针的异常* @param req* @param e* @return*/@ExceptionHandler(value =NullPointerException.class)public BaseResponseFacade exceptionHandler(HttpServletRequest req, NullPointerException e){log.error("发生空指针异常!原因是:",e);return ResponseUtil.error(ResponseCode.ERROR);}
}
系统日志
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;// 1. 使用方式: 使用LoggerFactory.getLogger() 创建即可即可
@Controller
public class DemoController {private static final Logger log = LoggerFactory.getLogger(DemoController.class);@RequestMapping("/demo")@ResponseBodyString demo() {log.trace("Hello {}", "trace");log.debug("Hello {}", "debug");log.info("Hello {}", "info");log.warn("Hello {}", "warn");log.error("Hello {}", "error");return "Hello";}
}
2.默认情况下,
日志是写在控制台上的
。我们可以把日志以文件的方式输出
只需在src/main/resources/下,创建一个logback.xml或logback-spring.xml就行
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoders are assigned the typech.qos.logback.classic.encoder.PatternLayoutEncoder by default --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="STDOUT" /></root>
</configuration>