Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Neues in Bean Validation 2.0 - Support für Java...
Search
Gunnar Morling
September 29, 2017
Programming
0
120
Neues in Bean Validation 2.0 - Support für Java 8 und mehr
Slides from a talk on the new features in Bean Validation 2.0, given at code.talks 2017 (German).
Gunnar Morling
September 29, 2017
Tweet
Share
More Decks by Gunnar Morling
See All by Gunnar Morling
Mastering Postgres Replication Slots: Preventing WAL Bloat and Other Production Issues (JavaZone 2025)
gunnarmorling
0
99
Ins and Outs of the Outbox Pattern
gunnarmorling
1
980
1BRC–Nerd Sniping the Java Community
gunnarmorling
0
130
Data Contracts In Practice With Debezium and Apache Flink
gunnarmorling
1
830
1BRC – Nerd Sniping the Java Community (JavaZone)
gunnarmorling
0
160
Syncing your Database To OpenSearch In Real-Time (JCON Slovenia)
gunnarmorling
0
310
1BRC – Nerd Sniping the Java Community (Keynote JCon Slovenia)
gunnarmorling
1
390
1BRC--Nerd Sniping the Java Community
gunnarmorling
0
570
Data Contracts In Practice With Debezium and Apache Flink (Kafka Summit London)
gunnarmorling
2
950
Other Decks in Programming
See All in Programming
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
750
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
1
120
Package Management Learnings from Homebrew
mikemcquaid
0
230
Smart Handoff/Pickup ガイド - Claude Code セッション管理
yukiigarashi
0
140
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
320
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
610
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
790
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
React Native × React Router v7 API通信の共通化で考えるべきこと
suguruooki
0
100
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
390
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
260
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
120
The browser strikes back
jonoalderson
0
400
Crafting Experiences
bethany
1
50
How STYLIGHT went responsive
nonsquared
100
6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
450
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
200
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Done Done
chrislema
186
16k
Transcript
Neues in Bean Validation 2.0 Support für Java 8 und
mehr Gunnar Morling, Red Hat @gunnarmorling 1
Agenda Was ist Bean Validation? Was gibt's Neues in Bean
Validation 2.0? Fragen 2
Gunnar Morling Opensource-Softwareentwickler bei Red Hat Debezium Hibernate Spec Lead
für Bean Validation 2.0 Andere Projekte: ModiTect, MapStruct
[email protected]
@gunnarmorling http://in.relation.to/gunnar-morling/ 3
Was ist Bean Validation? "Constrain once, validate everywhere" Constraints für
JavaBeans Validierung per API oder automatisch JPA JSF, Spring MVC, GWT JAX-RS Erweiterbar BV 1.1: Methodenvalidierung 4
Demo 5
Bean Validation 2.0 - JSR 380 Nutzung der neuen Sprachfeatures
von Java 8 Unterstützung der neuen APIs 6
Use Case: Passwortvalidierung basierend auf Nutzerrolle @Size.List({ @Size(min = 8,
group = Default.class), @Size(min = 12, group = Admin.class) }) private char[] password = ...; 7
@Size.List({ @Size(min = 8, group = Default.class), @Size(min = 12,
group = Admin.class) }) private char[] password = ...; @Size(min = 8, group = Default.class) @Size(min = 12, group = Admin.class) private char[] password = ...; Use Case: Passwortvalidierung basierend auf Nutzerrolle 8
Use Case: Nicht-leere Listenelemente sicherstellen private List<String> names; 9
private List<String> names; @NotEmpty private List<String> names; Use Case: Nicht-leere
Listenelemente sicherstellen 10
private List<String> names; @OnElements(constraint=@NotEmpty) private List<String> names; Use Case: Nicht-leere
Listenelemente sicherstellen 11
private List<String> names; private List<@NotEmpty String> names; @OnElements(constraint=@NotEmpty) private List<String>
names; Use Case: Nicht-leere Listenelemente sicherstellen 12
private List<String> names; private List<@NotEmpty @Pattern(regexp="[a-zA-Z]*") String> names; @OnElements(constraint=@NotEmpty) private
List<String> names; Use Case: Nicht-leere Listenelemente sicherstellen 13
private List<@NotEmpty @Pattern(regexp="[a-zA-Z]*") String> names; private List<String> names; @NotEmpty private
List<@NotEmpty String> names; @OnElements(constraint=@NotEmpty) private List<String> names; Use Case: Nicht-leere Listenelemente sicherstellen 14
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE }) @Retention(RUNTIME) @Repeatable(List.class)
@Documented @Constraint(validatedBy = { }) public @interface Size { ... } Typannotationen (JSR 308) Neuer Elementtyp TYPE_USE 15
Kaskadierende Validierung @Valid private List<Address> addresses; 16
@Valid private List<Address> addresses; private List<@Valid Address> addresses; Kaskadierende Validierung
17
@Valid private List<Address> addresses; private List<@Valid Address> addresses; private Map<@Valid
Comment, Integer> scorePerComment; Kaskadierende Validierung 18
@Valid private List<Address> addresses; private List<@Valid Address> addresses; private Map<@Valid
Comment, Integer> scorePerComment; private Map<@Valid AddressType, List<@Valid Address>> addressesByType; Kaskadierende Validierung 19
Weitere unterstützte Container Optional, OptionalInt, OptionalLong, OptionalDouble Propertytypen von JavaFX
Optional<@Email String> getEmail() { ... }; 20
Eigene Container Spezifische Kollektionstypen (z.B. Google Guava) Andere JVM-Sprachen (Ceylon,
Scala etc.) Unterstützt per Extractor SPI private Table<Year, String, Integer> revenuePerYearAndCategory; 21
private Table<Year, String, Integer> revenuePerYearAndCategory; private Table<Year, String, @Positive Integer>
revenuePerYearAndCategory; Eigene Container Spezifische Kollektionstypen (z.B. Google Guava) Andere JVM-Sprachen (Ceylon, Scala etc.) Unterstützt per Extractor SPI 22
Demo 23
Use Case: Lieferdatum in der Zukunft @Past/@Future unterstützen JSR-310-Typen: java.time.LocalDateTime,
ZonedDateTime etc. @Future private LocalDate deliveryDate = LocalDate.of( 2017, Month.MAY, 12 ); 24
@FutureOrPresent private LocalDate deliveryDate = LocalDate.of( 2017, Month.MAY, 12 );
@Future private LocalDate deliveryDate = LocalDate.of( 2017, Month.MAY, 12 ); Use Case: Lieferdatum in der Zukunft @Past/@Future unterstützen JSR-310-Typen: java.time.LocalDateTime, ZonedDateTime etc. 25
Use Case: Testen ValidatorFactory vf = Validation.byDefaultProvider() .configure() .clockProvider( new
FixedClockProvider( ZonedDateTime.of( 2016, 6, 15, 0, 0, 0, 0, ZoneId.of( "Europe/Paris" ) ) ) ) .buildValidatorFactory(); 26
Neue Constraints @NotEmpty, @NotBlank @Email @Positive, @PositiveOrZero , @Negative, @NegativeOrZero
@PastOrPresent, @FutureOrPresent 27
Andere Java 8 Goodies Parameternamen in Fehlermeldungen ConstraintValidator ohne initialize()
public class NotNullValidator implements ConstraintValidator<NotNull, Object> { public void initialize(NotNull constraintAnnotation) {} public boolean isValid(Object object, ConstraintValidatorContext ctx) { return object != null; } } public class NotNullValidator implements ConstraintValidator<NotNull, Object> { public boolean isValid(Object object, ConstraintValidatorContext ctx) { return object != null; } } 28
Status Final seit August Referenzimplementierung: Hibernate Validator 6.0 29
Finale Version Teil von Java EE 8 Enthalten in GlassFish
5; Patch für WildFly Unterstützt durch Spring 5 Alles ist Open Source: Spezifikation, API, TCK und RI 30
Resourcen Spezifikation Referenzimplementierung API, Spezifikation, TCK, Website @gunnarmorling http://beanvalidation.org/2.0/spec/ github.com/hibernate/hibernate-validator/
github.com/beanvalidation/ 31
32
Ausblick Bean Validation 2.1 Constraint-API mapping.constraintDefinition( FileExists.class ) .validateType( File.class
) .with( f -> f.exists() ); Constraint-API: Lambda ConstraintMapping mapping = ...; mapping.type( Marathon.class ) .property( "numberOfHelpers", FIELD ) .constraint( new MinDef().value( 1 ) ) .property( "runners", METHOD ) .valid(); 33