导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
端口配置
server:
port: 8080
拦截器
生成
package com.example.config;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Component
public class RequestInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 鉴权
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("username") == null) {
response.setStatus(401);
return false;
}
return true;
}
}
注册
package com.example.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private RequestInterceptor requestInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(requestInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login");
}
}
统一数据返回
package com.example.config;
import com.example.model.Result;
import com.fasterxml.jackson.databind.json.JsonMapper;
import lombok.SneakyThrows;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import java.lang.reflect.Method;
@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice<Object> {
private final static JsonMapper mapper = new JsonMapper();
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
// 获取执行方法
Method method = returnType.getMethod();
System.out.println(method.getName());
return true;
}
@SneakyThrows
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
Result result = Result.success(body);
// String由于映射器原因,直接返回对象会报错,需要转换一下
if (body instanceof String) {
return mapper.writeValueAsString(result);
}
return result;
}
}
统一异常处理
异常处理捕获后会从子到父依次匹配。
package com.example.config;
import com.example.model.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ResponseBody
@ControllerAdvice
public class ExceptionAdvice {
@ExceptionHandler
public Object handler(Exception e) {
return Result.fail("内部错误");
}
@ExceptionHandler
public Object handler(NullPointerException e) {
return Result.fail("NullPointerException");
}
}