寻找网络公司做公司网站升级改版,顺德网站建设价格,关键词优化排名软件案例,wordpress+安装插件+ftp先看歧义现象 值为null 未传递此属性 所以此时如何区分null 时传递进来的的null#xff0c;还是属性的默认值null?
引入方案 引入过滤器#xff0c;中间截获requestBodyData并保存到HttpServletRequest#xff0c;业务层从HttpServletRequest 获取到requestBodyData辅…先看歧义现象 值为null 未传递此属性 所以此时如何区分null 时传递进来的的null还是属性的默认值null?
引入方案 引入过滤器中间截获requestBodyData并保存到HttpServletRequest业务层从HttpServletRequest 获取到requestBodyData辅助判断此属性为未传递还是值为null
第1步定义并注册过滤器 自定义过滤器截获requestBodyData并保存到HttpServletRequest
import com.practisesvr.utils.http.FilterHttpServletRequest;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.GenericFilterBean;import java.io.IOException;Component
public class RequestCheckFilter extends GenericFilterBean {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.err.println(***RequestHeaderCheckFilter.doFilter.start***);if (!(request instanceof HttpServletRequest)) {throw new IllegalStateException(Expected HttpServletRequest);}HttpServletRequest httpRequest (HttpServletRequest) request;FilterHttpServletRequest filterHttpRequest new FilterHttpServletRequest(httpRequest);String body filterHttpRequest.getBody();filterHttpRequest.setAttribute(requestBodyData, body);// 继续执行filter链chain.doFilter(filterHttpRequest, response);System.err.println(***RequestHeaderCheckFilter.doFilter.end***);}
}[Ref 过滤器使用到 HttpServletRequestWrapper 参考如下 ] What is HttpServletRequestWrapper does? 注册过滤器
Configuration
public class AppConfig {Beanpublic FilterRegistrationBeanRequestCheckFilter requestCheckFilterRegistration() {FilterRegistrationBeanRequestCheckFilter registration new FilterRegistrationBean();registration.setFilter(new RequestCheckFilter());// 可以设置过滤器名称registration.setName(requestCheckFilter);// 设置拦截规则registration.addUrlPatterns(/*); // 拦截所有请求// 设置过滤器执行顺序默认为0数值越小优先级越高registration.setOrder(2);return registration;}
}第2步从HttpServletRequest 获取到requestBodyData
public class RequestIUtils {/*** 从当前请求上下文中获取并解析请求体数据将其转换为Map类型对象.** return 如果成功获取到请求体数据并转换成功则返回一个包含请求体内容的Map对象* 若RequestAttributes不存在或请求体数据为空则返回一个新的空HashMap对象。*/public static MapString, Object getRequestBodyBody() {RequestAttributes requestAttributes RequestContextHolder.getRequestAttributes();if (requestAttributes null) {return new HashMap();}HttpServletRequest request ((ServletRequestAttributes) requestAttributes).getRequest();Object requestBody request.getAttribute(requestBodyData);if (requestBody null) {return new HashMap();}return JsonUtils.jsonToT(requestBody.toString(), Map.class);}
} 第3步业务层使用requestBodyData辅助判断
Override
public Student update(Student student) {MapString, Object requestBody RequestIUtils.getRequestBodyBody();Student stu new Student();stu.setId(student.getId());stu.setUsername(student.getUsername());stu.setPassword(student.getPassword());stu.setAge(student.getAge());stu.setHeight(student.getHeight());stu.setGender(student.getGender());// 使用方式if (requestBody.containsKey(classId)){stu.setClassId(student.getClassId());}stu.setIsDelete(student.getIsDelete());this.studentsMapper.update(student);return this.queryById(student.getId());
}