对于具有 Java 1.8_431 的中间件,有一个 Spring 应用程序
<springframework.version>4.3.1.RELEASE</springframework.version>
我有一个模型,其中有一个我必须验证的电子邮件字段,它由以下代码表示:
import javax.validation.constraints.Email;
/**
* The Class RegForm.
*/
public class RegForm {
....
/** The email. */
@Email(message = "Insert a valid email")
private String email;
//getter and settser
}
该应用程序的POM组成:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.1.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version> <!-- Versione 2.0 o superiore -->
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.0</version> <!-- Necessario per l'Expression Language -->
</dependency>
我使用这个模型的Spring控制器是:
//many imports
import javax.validation.Valid;
....
@Controller
@RequestMapping("/reg")
public class RegController {
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index(@ModelAttribute("regForm") @Valid @RequestBody RegForm regForm,
BindingResult result, Model model, final RedirectAttributes redirectAttributes, HttpServletRequest req)
throws AcceleratoreException {
......
}
当我启动应用程序并调用此 API 时,服务器响应状态 500 且日志显示:
ServletException 的根本原因。
”的配置
javax.validation.UnexpectedTypeException:HV000030:找不到验证类型“java.lang.String”的约束“javax.validation.constraints.Email”的验证器。检查“电子邮件
我认为您使用的是相当旧版本的休眠验证器。
您是否需要使用
org.hibernate.validator.constraints.Email
(这在 jakarta.validation.constraints.Email
的后续版本中已弃用)