需求:前端传过来两个参数searchStartDate和searchEndDate,但是传的是带日期格式的,不带时分秒的,这就导致传到后台的时间都是00:00:0,searchStartDate倒无所谓,searchEndDate需加上23:59:59。
思路:1.用切面的方式,在切面对controller进行拦截
@Component
@Aspect
@Log4j2
public class SearchFormateAspect {
@Pointcut("execution(public * .*.*(..))")
public void getMethods() {
}
@Before("getMethods()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
//获取目标方法的参数信息
Object[] obj = ();
for (Object argItem : obj) {
if (argItem instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) argItem;
// 前端传入年月日,searchEndDate拼接23:59:59
Date searchEndDate = ();
if (searchEndDate != null) {
searchEndDate = (searchEndDate,23);
searchEndDate = (searchEndDate,59);
searchEndDate = (searchEndDate,59);
(searchEndDate);
}
}
}
}
}
2.过滤器,自定义一个过滤器,自定义wrapper实现HttpServletRequestWrapper
@Component
@Slf4j
public class SearchDateFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 获取你需要的参数
String searchStartDate = ("searchStartDate");
String searchEndDate = ("searchEndDate");
if ((searchStartDate) && (searchEndDate)) {
(request, response);
} else {
RequestParameterWrapper wrapper = new RequestParameterWrapper(request);
(wrapper, response);
}
}
}
public class RequestParameterWrapper extends HttpServletRequestWrapper {
private Map<String, String[]> params = new HashMap<>();
public RequestParameterWrapper(HttpServletRequest request) {
super(request);
(());
}
/**
* 重写getParameter,代表参数从当前类中的map获取
*
* @param name
* @return
*/
@Override
public String getParameter(String name) {
String[] values = (name);
if (values == null || == 0) {
return null;
}
return values[0];
}
@Override
public Map<String, String[]> getParameterMap() {
HashMap<String, String[]> newMap = new HashMap<>();
(());
String[] searchEndDate = ("searchEndDate");
if(searchEndDate != null && !(searchEndDate[0])){
("searchEndDate", new String[]{searchEndDate[0] + " 23:59:59"});
}
return (newMap);
}
/**
* 同上
*
* @param name
* @return
*/
@Override
public String[] getParameterValues(String name) {
return (name);
}
}