参数校验
使用
@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")
@ResponseBody
String 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 type
ch.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>