所以基本上我和我的一位同事都在争论以下哪种方法更适合自定义休息验证。基本上这个想法是执行一些检查并返回响应实体,因此如果检查失败 - >具有选定状态的返回响应实体,如果不是 - >响应实体(200);
第一种方法更多的是功能性方法,您可以在其中为Validation对象提供要验证的Object类型(),添加基本上期望谓词,原因消息和响应实体状态的规则(添加到List ,ResponseEntity>),遍历所有规则,验证是否有任何失败(在这种情况下返回具有失败规则状态的响应实效) - 如果没有规则失败 - >从orElseGet返回使用者,这将返回状态为OK的新响应实体。因此,您可以根据需要添加任意数量的规则,并且只有一个"返回"言。
public ResponseEntity(String s){
return new Validation<String>()
.addRule(
s -> s == null,
"string length should not be null",
HttpStatus.BAD_REQUEST
)
.addRule(
s -> s.length < 10,
"string length should be > 10",
HttpStatus.NOT_FOUND
)
.addRule(
s -> s.length > 20,
"string length sbould be < 20",
HttpStatus.BAD_REQUEST
)
.collectRules()
.stream()
.filter(p -> p.getVal1().test(s))
.findFirst()
.map(Tuple::getVal2)
.orElseGet(() -> {
//do some computations
return new ResponseEntity<>("ok", HttpStatus.OK);
});
}
}
第二种方法非常直观 - 无需解释,nok返回具有400状态的新响应实体和您提供的消息,而ok返回状态为ok的新响应实体。
public ResponseEntity(String s){
if({check}) {
return nok("reason for failure message");
}
if({check}) {
return nok("reason for failure message");
}
if({check}) {
return nok("{reason for failure message}");
}
if({check}) {
return nok("{reason for failure message}");
}
//do some computations
return ok();
}
}
您更喜欢使用哪种方法?为什么? :)