我使用的是spring boot 2.0.6、hibernate Validator6.0、validation-api 2.0和apache CXF。我在controler方法中使用了@Valid注释,然后在bean属性中设置了@NotNull、@Email和适当的消息。然后我创建了一个CustomExceptionHandler来处理MethodArgumentNotValideXception。当邮递员测试它时,我没有得到正确的响应与我的验证消息。
UserController.Class
@Path("/user")
@Component
public class UserController {
@POST
@Path("/register")
@Consumes(MediaType.APPLICATION_JSON_VALUE)
@Produces(MediaType.APPLICATION_JSON_VALUE)
public Response registerUser(@Valid User user) {
String status = "";
Boolean isEmailIdExist = UserAuthService.checkUserByMailId(user.getEmail());
Boolean isUserNameExist = UserAuthService.checkUserByUserName(user.getUserName());
if(!isEmailIdExist) {
if(!isUserNameExist) {
status = UserAuthService.registerUser(user);
}else {
status = "Username already taken. Try with different name";
}
}else {
status = "Email ID already exist";
}
return Response.ok(status).build();
}
}
user.class
@Entity
@Table(name = "USER")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "UID")
private int userId;
@NotBlank(message = "Please provide first name")
@Column(name = "FIRST_NAME", length = 50)
private String firstName;
@NotBlank(message = "Please provide email")
@Column(name = "EMAIL", length = 100, unique = true)
@Email(message = "Please provide a valid email")
private String email;}
getter/setter
}
CustomExceptionHandler.java
@ControllerAdvice
@Component
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(Exception.class)
public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));
return new ResponseEntity<Object>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR);
}
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
ErrorDetails errorDetails = new ErrorDetails(new Date(), "Validation Failed", ex.getBindingResult().toString());
return new ResponseEntity<Object>(errorDetails, HttpStatus.BAD_REQUEST);
}
}
Json结构
{
"firstName":"",
"email":"prakashkumar@xyz.com",
}
如果您遇到了例如:无法看到返回到客户端的验证错误(默认消息)的问题,您可以这样做:
顶级解决方案1:简单地添加devtools。这应该可以解决问题。在我这样做之后,所有的绑定结果都返回给了客户机。我建议您首先测试一下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
解决方案二:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
server.error.include-message=always
server.error.include-binding-errors=always
解决方案3:(在我发现解决方案2之前,它也可能有帮助)
所以我发现这是因为有了Spring Boot2.3+。但在Spring BootV2.3+中,我找不到关于@valid新更新用法的警告消息。
因此,我最终切换回SpringBootV2.2.10(2.2的最新版本),方法是调整pom.xml文件中的发行版本,如下所示:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
我希望我的REST API在存在异常和参数类型不匹配时抛出异常。以下是我的请求对象。 在上面的情况下,当一个请求违反这个字符串要求时,应该引发异常(向订阅类型提供一个整数值)。我还需要对无效字符进行验证,如*、-、 我的控制器看起来像这样。 我正在使用@Valid注释,并且我已经包含了Hibernate验证器的maven依赖项 但问题是,它不验证我的输入,也不接受订阅类型和caseId的整数值。
2016年8月1日11:34:39 AM org.apache.catalina.core.standardWrapperValve在路径为[/travelocity.com]的上下文中为servlet[jsp]调用严重:servlet.service()引发了异常[SAML响应的签名验证失败],根本原因为org.wso2.carbon.identity.sso.agent.exception.s
尝试在Heroku云中部署Spring Boot应用程序,但编译java应用程序时出现错误,但在我的本地计算机中运行良好。
问题内容: 我正在用作iPhone客户端的后端API服务器。我正在使用进行身份验证。相关代码如下: 和 现在,我设法将失败的登录重定向到/ loginfail,在那里我将一些JSON发送回iPhone客户端。但是,这没有足够的粒度。我希望能够将适当的错误发送回iPhone客户端,例如:“找不到用户”或“密码错误”。用我现有的代码,我看不到如何实现。 我尝试按照示例进行操作,以完成passport.
我正在使用Spring引导应用程序连接MongoDB实例。我们已在MongoDB上启用了以下角色的身份验证 角色:[ { role: "dbOwner ",db: "{{ mongo.database_name }}" } 角色:[ { role: "readWrite ",db: "{{ mongo.database_name }}" } 我们使用conf文件提供凭证 数据: mongodb。u
放心,当我们这样做时 抛出的错误总是连续的,也就是说,如果状态代码失败,它不会检查contentType是否是JSON。 此外,抛出的错误始终是,断言错误(预期:200,实际:404)。无法从中了解实际响应是什么,如果启用日志记录,它将打印在标准输出上,但其他任何方式都不可用。 是否有任何方法来构建或设置类似于我们如何实现<code>过滤器 我有一个 rest api 框架,其中大多数验证都是使用