做一个网站的基本步骤,强大的网站,深圳网站设计的公司,淘宝联盟怎么推广赚钱目录 全局监听请求#xff1a;HandlerInterceptor创建拦截器类添加拦截器拦截器类调用Service服务 全局异常处理#xff1a;ExceptionHandler统一处理业务异常自定义JsonResult 全局跨域配置#xff1a;WebMvcConfigurer静态(static)方法中调用接口#xff08;Service层HandlerInterceptor创建拦截器类添加拦截器拦截器类调用Service服务 全局异常处理ExceptionHandler统一处理业务异常自定义JsonResult 全局跨域配置WebMvcConfigurer静态(static)方法中调用接口Service层定时任务 全局监听请求HandlerInterceptor
创建拦截器类
public class RequestInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return HandlerInterceptor.super.preHandle(request, response, handler);}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {...TrackUtil.report(info); // 通过工具类调用服务}
}添加拦截器
Configuration
public class WebConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry interceptorRegistry) {interceptorRegistry.addInterceptor(...); // 其他拦截器interceptorRegistry.addInterceptor(new RequestInterceptor()); // 添加本拦截器}
}拦截器类调用Service服务
借助工具类
Component
public class TrackUtil {public static TrackUtil trackUtil; //声明对象Autowired //注入TrackService trackService;PostConstruct //初始化public void init() {trackUtil this;trackUtil.trackService this.trackService;}public static void report(Object info){trackUtil.trackService.report(info);}
}全局异常处理ExceptionHandler
统一处理业务异常
ControllerAdvice
public class GlobalExceptionHandler {ExceptionHandler({ServletException.class})ResponseBodyResponseStatus(value HttpStatus.BAD_REQUEST)public JsonResult errorHandler1(HttpServletRequest request,HttpServletResponse response,Exception e) {e.printStackTrace();response.setCharacterEncoding(UTF-8);//防止返回中文乱码return JsonResult.build(400, e.getMessage());}ExceptionHandler({Exception.class})ResponseBodyResponseStatus(value HttpStatus.INTERNAL_SERVER_ERROR)public JsonResult errorHandler(HttpServletRequest request,HttpServletResponse response,Exception e) {e.printStackTrace();response.setCharacterEncoding(UTF-8);//防止返回中文乱码return JsonResult.build(500, e.getMessage());}
}自定义JsonResult
Data
public class JsonResult {private Integer code; //响应状态码private String msg; //响应消息private Object data; //响应数据public JsonResult(Integer code, String msg, Object data) {this.code code;this.msg msg;this.data data;}public JsonResult(Integer code, String msg) {this.code code;this.msg msg;}public static JsonResult build(Integer status, String msg, Object data) {JsonResult jsonResult new JsonResult(status, msg, data);return jsonResult;}public static JsonResult build(Integer status, String msg) {JsonResult jsonResult new JsonResult(status, msg);return jsonResult;}public static JsonResult ok( Object data) {JsonResult jsonResult new JsonResult(200, success, data);return jsonResult;}Overridepublic String toString() {JSONObject jsonObjectnew JSONObject();jsonObject.put(code,code);jsonObject.put(msg,msg);jsonObject.put(data,data);return JSON.toJSONString(jsonObject);}
}全局跨域配置WebMvcConfigurer
Configuration
public class WebConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry corsRegistry) {corsRegistry.addMapping(/**).allowedOrigins(*).allowedMethods(GET, HEAD, POST, PUT, DELETE, OPTIONS).allowCredentials(true).maxAge(3600).allowedHeaders(*);}
}静态(static)方法中调用接口Service层
Component
public class JwtUtil {/*** 静态方法调用非静态接口层(Service层)*/public static JwtUtil jwtUtil; //声明对象PostConstruct //初始化public void init() {jwtUtil this;jwtUtil.userService this.userService;}Autowired //注入UserService userService;public static boolean checkSign(String token) {
...String username jwtUtil.userService.getUsernameById(userId);
...
}定时任务
package com.example.demo.util;import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;Component
EnableScheduling //开启定时任务
EnableAsync //开启多线程
Slf4j
public class ScheduleAsync {/** cron* [秒] [分] [小时] [日] [月] [周] [年]* 年非必须* *每秒/分/小时/日...都会触发* 不指定值只可用于日和周* 1-3表示区间1、2、3都会触发* 5/15表示递增触发从5开始每15秒触发* L表示最后一天或周六*/AsyncScheduled(cron 0/10 * * * * ?)//从00开始每十秒public void first(){log.info(LocalDateTime.now().format(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)));}AsyncScheduled(cron 0 0 2 * * ?)//每天半夜两点public void second(){log.info(LocalDateTime.now().format(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)));}
}