[JAVA] Hivernate Validator ne fonctionne pas dans l'environnement WAS Liberty

Aperçu

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.

environnement

Cet evènement

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. スクリーンショット 2019-10-03 21.19.04.png
Pour une raison quelconque, seul Not Empty est exécuté. .. ..

Essayez-le avec Tomcat

Essayez de mettre la même application sur Tomcat. スクリーンショット 2019-10-03 21.20.57.png Ouais, ça marche. .. .. Pourquoi orz

Comment répondre

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>

スクリーンショット 2019-10-03 21.15.58.png

finalement

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

Hivernate Validator ne fonctionne pas dans l'environnement WAS Liberty
Solution Pay.JP lorsqu'elle fonctionne localement mais ne fonctionne pas bien en environnement de production
le changement de largeur de tabulation d'éclipse ne fonctionne pas
JavaScript (vanilla) ne répond pas dans Rails.
Le conteneur MySQL ne démarre pas dans Docker
Le fichier .sql ne s'exécute pas dans docker-compose
Création d'un servlet dans l'environnement Liberty
L'image n'est pas affichée dans l'environnement de production
Le code écrit en Java-TeraPad à partir du débutant ne fonctionne pas en raison d'une erreur
La séquence d'échappement (\) ne fonctionne-t-elle pas? (pour Mac)
La solution pour NetBeans 8.2 ne fonctionne pas dans l'environnement Java 9
Lorsque @Transactional of Spring Boot ne fonctionne pas
Dans la boîte de dialogue d'avertissement lors du démarrage de l'applet, la vérification de "Ne pas afficher de la prochaine fois" ne fonctionne pas