Lorsque j'ai essayé de valider avec Controller en utilisant HibernateValidator dans l'environnement WASLiberty, seuls les champs annotés avec HibernateValidator n'étaient pas vérifiés. Il semble que certaines personnes ont des problèmes avec des événements similaires même s'ils ont été résolus, je vais donc le laisser comme note de service.
Tout d'abord, à partir d'une configuration simple. Controller
package com.atu496.sample.pl.controller;
@Controller
public class MainController {
@GetMapping("/")
public ModelAndView get(@ModelAttribute SampleForm form, ModelAndView mav) {
mav.addObject("form", form);
mav.setViewName("index");
return mav;
}
@PostMapping("/exe/validation")
public String exe(@ModelAttribute @Valid SampleForm form, BindingResult result, RedirectAttributes attribute) {
if (result.hasErrors()) {ß
for (ObjectError error : result.getAllErrors()) {
String fieldErrors = ((FieldError) error).getField();
attribute.addFlashAttribute(fieldErrors + "errormsg", error.getDefaultMessage());
}
}
return "redirect:/";
}
}
Form
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import lombok.Data;
@Data
public class SampleForm {
@Length(min = 8, max = 20)
private String length;
@NotBlank
private String notblank;
@NotEmpty
private String notempty;
@Email
private String email;
}
Thymeleaf
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Validation du validateur Hibernate</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="jumbotron">
<h1>Validation du validateur Hibernate</h1>
<p>Page de démonstration de vérification Hibernate Validator.</p>
</div>
<div class="panel panel-success">
<div class="panel-heading">Contrôle de validation</div>
<div class="panel-body">
<form method="post" action="#" th:action="@{/exe/validation}">
<p>
@Length:<input type="text" name="length" /><span
th:text="${lengtherrormsg}"></span>
</P>
<p>
@Email:<input type="text" name="email" /><span
th:text="${emailerrormsg}"></span>
</P>
<p>
@NotEmpty:<input type="text" name="notnull" /><span
th:text="${notemptyerrormsg}"></span>
</P>
<p>
@NotBlank:<input type="text" name="notblank" /><span
th:text="${notblankerrormsg}"></span>
</p>
<button type="submit" class="btn btn-default">Courir</button>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
Dans cet état, déployez sur WAS Liberty et essayez-le.
Pour une raison quelconque, seul Not Empty est exécuté. .. ..
Essayez de mettre la même application sur Tomcat. Ouais, ça marche. .. .. Pourquoi orz
Le problème semble être que le validateur Hibernate n'est pas reconnu par le chargeur de classe WASLiberty. En ajoutant le fichier validation.xml suivant à META-INF du projet cible pour donner la priorité à l'utilisation d'Hibernate Validator, la validation a été exécutée avec succès. validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<validation-config
xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration http://www.jboss.org/xml/ns/javax/validation/configuration/validation-configuration-1.0.xsd">
<default-provider>org.hibernate.validator.HibernateValidator</default-provider>
</validation-config>
Pour référence, téléchargez cette application de vérification sur Github. L'événement n'a pas frappé facilement et j'ai réussi à le résoudre par essais et erreurs, mais comme j'ai passé beaucoup de temps sur cette enquête, j'aimerais que les gens qui sont coincés avec des événements similaires y fassent référence.
Recommended Posts