gpt4 book ai didi

java - 基于注释的请求验证

转载 作者:行者123 更新时间:2023-12-01 15:28:32 25 4
gpt4 key购买 nike

我正在尝试验证请求中的数字变量,即我想要实现的目标,以使该字段不为空且为数字。我希望针对 null 和转换错误报告不同的错误。

我试图使用 org.springframework.format.annotation.NumberFormat

为什么@NumberFormat没有默认消息属性?有没有原因导致这个被错过了。我现在必须自定义它,因为我没有使用消息资源包。

public class AddToJobsShortListWSRequest implements Serializable {

@NumberFormat(style = NumberFormat.Style.NUMBER)
@NotNull(message="ASL01")
private Long userDetailId;

Controller

public ResponseEntity<String> handlePostRequest(String xmlRequest, String... externalIds) {

ResponseEntity<String> response = null;
Set<Enum> enums = new HashSet<Enum>();
AddToJobsShortListWSRequest addToJobsShortListWSRequest = serializationDeserializationSupport.fromString(xmlRequest, AddToJobsShortListWSRequest.class);

if(!jsonRequestValidator.validate(AddToJobsShortListWSError.class, enums, addToJobsShortListWSRequest))
{
response = getBadRequestErrorResponseEntity(enums);
}
else{
.....
}

validator

 private void validate(@SuppressWarnings("rawtypes") Class enumClass, Object object, @SuppressWarnings("rawtypes") Set<Enum> enums) {
BindException errors = new BindException(object, "object");

validator.validate(object, errors);

@SuppressWarnings({"rawtypes"})
List fieldErrors = errors.getFieldErrors();

for (int i = 0; i < fieldErrors.size(); i++) {
if (fieldErrors.get(i) instanceof FieldError) {
String m = ((FieldError) fieldErrors.get(i)).getDefaultMessage();
enums.add(Enum.valueOf(enumClass, m));
}
}
}

是否还有其他适用于此处的基于注释的验证?另外,验证的顺序是什么,哪个先启动,NumberFormat,NotNull?

提前致谢:)

最佳答案

它没有被错过 - 验证只是比您需要的更简单,而且 Spring 仅支持消息资源包作为 i18n 工具。

因此,对于您的特殊情况 - 对于来说可能不是很特别 - 您需要特殊的实现。

此外,也不保证验证顺序。每个验证都必须处理它无法处理的所有情况(因此数字验证必须处理空值和 null 值,因为其他验证会检查这一点)。

我发现基于注释的验证对于非常简单的 hello-world 类型情况很有用,例如 @NotNull@NotEmpty。对于其他一切,我更喜欢 commons validator加上我自己的注释,因为这允许我定义应用程序所需的模式和常见验证,并在必要时按定义的顺序运行它们。

关于java - 基于注释的请求验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9871158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com