当前位置: 首页 > 知识库问答 >
问题:

定制大小注释上的Java验证消息

商品
2023-03-14
public class ExecutionStepOption extends AbstractDomainObject implements Nameable {

private static final long serialVersionUID = 4249454967446069549L;

@NotNull
@Size(min = 1, max = 100)
@Column(name = "name")
private String name;

@NotNull
@Size(min = 1, max = 10)
@Column(name = "value")
private String value;

在HTML方面,我有一个表单,它有两个textbox,这两个textbox包含名称和值。当用户输入一个大于10个字符大小的值时,我想显示一个类似“值大于10个字符”的定制消息

我试过这个

@NotNull
@Size(min = 1, max = 10, message = "Size cannot be greater than 10 Characters")
@Column(name = "value")
private String value;

但似乎不起作用。我仍然会收到丑陋的Java消息

Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction
javax.validation.ConstraintViolationException: Validation failed for classes [org.misoenergy.darr.domain.ExecutionStepOption] during persist time for groups [javax.validation.groups.Default, ]

共有1个答案

松和泰
2023-03-14

如果您使用的是spring mvc,那么您可以保留您正在做的事情,并添加一个ContollerAdvise,如下所示:

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

import javax.validation.ConstraintViolationException;

@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(value = { ConstraintViolationException.class})
    protected ResponseEntity<Object> handleNotAuthenticated(RuntimeException ex, WebRequest request) {

        // String message =  extract violation message from exception

        return handleExceptionInternal(ex, message, 
          new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request);
    }

}

添加逻辑以从异常中提取您的消息,并将HttpStatus更改为您喜欢的。该消息将在您的响应正文中返回。

如果可以将约束设置在DTO上,则可以在控制器中使用@valid注释,如下所示:

@RequestMapping(value = "/stepoption", method = RequestMethod.POST)
public String setOption(@Valid ExecutionStepOption  stepoption) {

        return "whatever";

}
 类似资料:
  • 我正在开发一个java spring mvc应用程序。我已经实现了一个自定义的验证注释来验证某些字符串(例如)。这是我的注释体: 这是我的类:

  • 我有一个具有类型为的字段的实体,在该字段上我定义了一个注释,强制执行与给定正则表达式匹配的字段内容。现在我想知道,是否可以参数化约束,例如在定义的验证错误消息中显示与正则表达式不匹配的第一个字符。 更糟糕的是,要显示的约束违反错误消息不是直接在注释中定义的,而是在属性文件中定义的,如下面所示的示例: 示例类: 示例属性文件: 有可能用javax做这样的事情吗。验证?我假设注释无法参数化错误消息。但

  • 我正在开发spring mvc应用程序,我应该在spring mvc validator的基础上应用验证。第一步,我为类和设置控制器添加了注释,效果很好。现在我需要实现自定义验证器来执行复杂的逻辑,但我想使用现有的注释并添加额外的检查。 我的用户类: 我的验证器: 我的控制器: 那么,有可能同时使用自定义验证器和注释吗?如果是,怎么做?

  • 我正在使用注释在SpringMVC中进行验证。。。 我对一个字段使用了两个注释进行验证 @NotEmpty(message=“required”) @大小(最小值为3,最大值为8,消息为超出范围) 私有字符串密码; 我面临的问题是,当字段留空时,它会显示两条错误消息(*必需,并且超出范围)。但我想显示其中一条错误消息,而不是两条。。。 可以用一条消息进行限制吗?如果是,这种情况的可能性是什么? 任

  • 此外,如果spring bean中有注释,那么是否有一种方法可以验证注入的bean是否具有正确的作用域。我的假设是,如果您将原型作用域bean注入到单例作用域bean中,很可能这不是您想要的。虽然在某些用例中,这是开发人员想要的,但在我们的案例中,到目前为止,这主要是开发人员的错误。

  • java验证的传统方式是定义一个具有属性的类,并用一个或多个验证约束注释进行注释,例如或。 是否可以使用验证器约束注释直接验证对象,而无需指定类。例如: