题目不知道说清楚了没有。意思是这样的。我写了一个类RequestLog用来记录request。这个类的对象需要HttpServletRequst对象来实例化。
@Data
@Component
@ConfigurationProperties(prefix = "requestlog")
public class RequestLog {
private Integer id;
private Date time;
private String method;
private String uri;
private String query;
private String ip;
public RequestLog(HttpServletRequest request) {
this.time = new Date();
this.id = new Random().nextInt(10000); //TODO
this.method = request.getMethod();
this.uri = request.getRequestURI();
this.query = request.getQueryString();
this.ip = MyUtil.getIpAddr(request);
}
}
启动时会报空指针错误。或许是Spring初始化RequstLog时还没有request。
最后没有办法只能想到这个:
@Data
@Component
@ConfigurationProperties(prefix = "requestlog")
public class RequestLog {
// 私有成员变量...
public RequestLog() {
}
public RequestLog builder(HttpServletRequest request) {
this.time = new Date();
this.id = new Random().nextInt(10000); //TODO
this.method = request.getMethod();
this.uri = request.getRequestURI();
this.query = request.getQueryString();
this.ip = MyUtil.getIpAddr(request);
return this;
}
}
需要用RequestLog对象的时候builder一下,运行测试没有问题。请教一下有没有更好(更优雅)的解决办法。