[JAVA] Hivernate Validator funktioniert nicht in der WAS Liberty-Umgebung

Überblick

Als ich versuchte, mit Controller mithilfe von HibernateValidator in der WASLiberty-Umgebung zu validieren, wurden nur die mit HibernateValidator kommentierten Felder nicht überprüft. Es scheint, dass einige Leute Probleme mit ähnlichen Ereignissen haben, obwohl sie gelöst wurden, also werde ich es als Memo belassen.

Umgebung

Diese Veranstaltung

Zunächst aus einer einfachen Konfiguration. 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>Validierung des Ruhezustands-Validators</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>Validierung des Ruhezustands-Validators</h1>
				<p>Demo-Seite zur Überprüfung des Ruhezustands.</p>
			</div>
			<div class="panel panel-success">
				<div class="panel-heading">Validierungsprüfung</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">Lauf</button>

					</form>
				</div>
			</div>
		</div>
	</div>
</body>
</html>

Stellen Sie in diesem Status WAS Liberty bereit und probieren Sie es aus. スクリーンショット 2019-10-03 21.19.04.png
Aus irgendeinem Grund wird nur Nicht leer ausgeführt. .. ..

Probieren Sie es mit Tomcat

Versuchen Sie, dieselbe Anwendung auf Tomcat zu installieren. スクリーンショット 2019-10-03 21.20.57.png Ja, es funktioniert. .. .. Warum orz

Wie soll man antworten

Das Problem scheint zu sein, dass der Hibernate Validator vom WASLiberty-Klassenladeprogramm nicht erkannt wird. Durch Hinzufügen der folgenden validation.xml zu META-INF des Zielprojekts, um der Verwendung des Hibernate Validator Vorrang einzuräumen, wurde die Validierung erfolgreich ausgeführt. 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

Schließlich

Laden Sie diese Referenzanwendung als Referenz auf [Github] hoch (https://github.com/atu496/HibernateValidator-sample "Github"). Das Ereignis traf nicht leicht und ich schaffte es, es durch Versuch und Irrtum zu lösen, aber da ich viel Zeit mit dieser Untersuchung verbracht habe, möchte ich, dass Leute, die mit ähnlichen Ereignissen feststecken, darauf verweisen.

Recommended Posts

Hivernate Validator funktioniert nicht in der WAS Liberty-Umgebung
Pay.JP-Lösung, wenn sie lokal funktioniert, aber in der Produktionsumgebung nicht gut funktioniert
Die Änderung der Breite der Eclipse-Registerkarte funktioniert nicht.
JavaScript (Vanille) reagiert in Rails nicht.
Der MySQL-Container startet nicht in Docker
Die SQL-Datei wird nicht in Docker-Compose ausgeführt
Erstellen eines Servlets in der Liberty-Umgebung
Das Bild wird in der Produktionsumgebung nicht angezeigt
In Java-TeraPad ab Anfänger geschriebener Code funktioniert aufgrund eines Fehlers nicht
Funktioniert die Escape-Sequenz (\) nicht? (für Mac)
Lösung für NetBeans 8.2 funktioniert nicht in Java 9-Umgebung
Wenn @Transactional of Spring Boot nicht funktioniert
Im Warndialog beim Starten des Applets funktioniert die Prüfung "Beim nächsten Mal nicht anzeigen" nicht