【发布时间】:2018-08-06 14:36:54
【问题描述】:
当下面的代码针对 Sonarqube 中的错误运行时
@Component
public class SMOCreateSignObjectValidator implements Validator{
private static final Logger LOG = LoggerFactory.getLogger(SMOCreateSignObjectValidator.class);
@Override
public boolean supports(Class<?> clazz) {
LOG.info("Inside create Sign Object validator");
return AgreementRecordRequest.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
AgreementRecordRequest agreementRecordRequest = (AgreementRecordRequest)target;
if(null==agreementRecordRequest.getCustomerId() || agreementRecordRequest.getCustomerId().replaceAll("\"", "").length()==0 ){
throw new SystemException(SMOErrorConstants.MESSAGE_SMO_0003_MSG);
}
if(agreementRecordRequest.getExpiryDate().isEmpty()){
throw new SystemException(SMOErrorConstants.MESSAGE_SMO_0004_MSG);
}
}
}
在 sonarcube 中抛出以下错误。 sonarqube screenshot
“目标必须为非空但被标记为可空”
我没有明确添加任何注释,为什么会出现这个错误?
【问题讨论】:
-
是否在
AgreementRecordRequest中声明? -
Validator的target参数是用Nullable注解的吗?可以想象,sonarqube 将接口的注解应用到实现上,然后通过赋值传递给你的agreementRecordRequest。虽然这使诊断有点神秘,但如果确实发生了这种情况,那么这是一件合适的事情。 -
验证器中没有可以为空的标记?
标签: java sonarqube custom-validators