gpt4 book ai didi

spring - 在 spring-data-rest 中使用验证器返回 http 500 而不是 400

转载 作者:IT老高 更新时间:2023-10-28 13:50:13 26 4
gpt4 key购买 nike

我正在尝试让 spring-data-rest 中的验证工作。从文档中您只需要提供一个验证器,我已经让它工作了,但是当验证约束被成功捕获/处理时,我会得到一个带有堆栈跟踪的 500 错误页面。

在配置类 RepositoryRestMvcConfiguration 它有一个validationExceptionHandler,看起来它应该得到这样的验证错误以返回400而不是500。它也是一个延迟加载的bean。

我的设置不正确吗?还是有其他方法可以让 spring-data-rest 返回 400 而不是 500?

我正在使用 spring-data-rest 2.0.0 版本

tomcat 返回的堆栈跟踪:

HTTP Status 500 - Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [test.domain.Account] during persist time for groups [javax.validation.groups.Default, ]

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [test.domain.Account] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='size must be between 0 and 10', propertyPath=login, rootBeanClass=class test.domain.Account, messageTemplate='{javax.validation.constraints.Size.message}'}
]
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

账户实体:

@Entity
public class Account {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;

@Column(unique = true)
@Size(max = 10)
String login;

}

RestMvcConfig:

@Configuration
public class RestExporterRestConfig extends RepositoryRestMvcConfiguration {}

最佳答案

似乎已经开始工作了;我必须重写 validatingRepositoryEventListener() 并手动将验证器添加到监听器;

@Configuration
public class RestExporterRestConfig extends RepositoryRestMvcConfiguration {

@Bean
public Validator validator() {
return new LocalValidatorFactoryBean();
}

@Bean
@Override
public ValidatingRepositoryEventListener validatingRepositoryEventListener() {
ValidatingRepositoryEventListener listener = new ValidatingRepositoryEventListener();
configureValidatingRepositoryEventListener(listener);
listener.addValidator("afterCreate", validator());
listener.addValidator("beforeCreate", validator());
return listener;
}

}

我现在得到如下返回的 400;

400 Bad Request
{"errors":
[{ "entity":"Account",
"message":"size must be between 0 and 10",
"invalidValue":"login 0dsfdsfdsfdsfdsfdsfdsfds",
"property":"login"
}]
}

关于spring - 在 spring-data-rest 中使用验证器返回 http 500 而不是 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22029727/

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