java - 如何确定 ConstraintViolation 是来自 JSON 属性还是来自 URL 参数?
问题描述
我有一个代码可以从用户那里获取数据并验证它是否有效。
验证是针对来自 的数据URL
和来自 的数据JSON
。
问题是,如果URL
路径字段包含arg0
并且它需要我从以下位置获取它message
:
@ValidId (message = "The field is invalid")
private Long field;
字段的注释。
在这种情况下JSON
,我可以简单地从path.substring(path.lastIndexOf('.') + 1)
.
IE
protected String buildErrorMessage(ConstraintViolation<?> violation) {
String path = violation.getPropertyPath().toString();
String field = path.substring(path.lastIndexOf('.') + 1);
//field = `arg0` in case of url
//field = `field` in case of JSON
}
如果我面临 ConstraintViolation - 我如何才能确定违规是来自JSON
or GET
?
编辑
这是我调用 buildErrorMessage 的地方 -
public class ValidationExceptionMapper implements ExceptionMapper<ValidationException> {
@Override
public Response toResponse(ValidationException exception) {
if (exception instanceof ConstraintViolationException) {
final ConstraintViolationException constraint = (ConstraintViolationException) exception;
for (final ConstraintViolation<?> violation : constraint.getConstraintViolations()) {
String message = buildErrorMessage(violation); //HERE
}
}
解决方案
以下是一些有助于ExceptionMapper
检查是否ConstraintViolation
与URL 中发送的无效参数或JSON 有效负载中发送的无效属性相关的步骤:
Path
从ConstraintViolation
使用方法中检索属性getPropertyPath()
;Node
从属性中找到叶子Path
;- 使用方法检查
Node
种类getKind()
。 - 相应地处理它。
请记住,参数注释,如@QueryParam
和@PathParam
可以@MatrixParam
放在方法参数、资源类字段或资源类 bean 属性中。
我建议您查看我在GitHubExceptionMapper
中对for ConstraintViolationException
available 的实现。
推荐阅读
- python - DataFrame 到多级列数据框
- git-bash - Windows 10 (x64) git bash 不响应任何标准输出
- build - 使用 iOS 应用提交后在 AppStore 连接中找不到 watchOS
- devops - 将多个 Azure Devops 存储库迁移到一个 Azure Devops 存储库
- c++ - 用前导零初始化整数会产生意想不到的结果(C++)
- r - 使用因子在 Shiny 和 Rmarkdown 中使用 DT 进行自定义排序
- php - 如何使用数据库中的值 1/0 选中/取消选中行上的复选框?
- r - 我想在闪亮的应用程序中绘制 timevis 是否可以通过输入文件然后绘制 timevis
- api - 如何创建可以执行用户代码的网站
- android - Instagram - 使用 ADD_TO_STORY 意图操作共享内容时出错