Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Bean Validation 2.0 - Support für Java 8 und mehr
Search
Gunnar Morling
March 28, 2017
Programming
0
230
Bean Validation 2.0 - Support für Java 8 und mehr
Learn what's coming in Bean Validation 2.0 (JSR 380); Slides from JavaLand 2017 (German)
Gunnar Morling
March 28, 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
92
Ins and Outs of the Outbox Pattern
gunnarmorling
1
920
1BRC–Nerd Sniping the Java Community
gunnarmorling
0
130
Data Contracts In Practice With Debezium and Apache Flink
gunnarmorling
1
790
1BRC – Nerd Sniping the Java Community (JavaZone)
gunnarmorling
0
160
Syncing your Database To OpenSearch In Real-Time (JCON Slovenia)
gunnarmorling
0
300
1BRC – Nerd Sniping the Java Community (Keynote JCon Slovenia)
gunnarmorling
1
390
1BRC--Nerd Sniping the Java Community
gunnarmorling
0
560
Data Contracts In Practice With Debezium and Apache Flink (Kafka Summit London)
gunnarmorling
2
940
Other Decks in Programming
See All in Programming
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
160
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
130
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
800
tparseでgo testの出力を見やすくする
utgwkk
2
260
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
110
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.7k
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
110
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
600
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
140
チームをチームにするEM
hitode909
0
360
Cell-Based Architecture
larchanjo
0
140
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
240
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.1k
A Tale of Four Properties
chriscoyier
162
23k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
91k
The browser strikes back
jonoalderson
0
67
What's in a price? How to price your products and services
michaelherold
246
13k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
110
Tell your own story through comics
letsgokoyo
0
750
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
0
160
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Transcript
Bean Validation 2.0 Support für Java 8 und mehr Gunnar
Morling, Red Hat 1
Was erwartet Euch? Was ist Bean Validation? Was ist neu
in Bean Validation 2.0? Feedback geben 2
Gunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte 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? "Constraint once, validate everywhere" Constraints für
JavaBeans Validierung per API oder automatisch JPA JSF, Spring MVC, GWT JAX-RS Erweiterbar (eigene Constraints) BV 1.1: Methodenvalidierung 4
Demo 5
Bean Validation 2.0 - JSR 380 Einsatz der neuen Sprachfeatures
Unterstützung der API-Erweiterungen 6
Wiederholbare Annotationen @Size.List({ @Size(min = 8, group = Default.class), @Size(min
= 12, group = Admin.class) }) private char[] password = ...; 7
Wiederholbare Annotationen @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 = ...; 8
Validierung von Collections private List<String> names; 9
Validierung von Collections private List<String> names; @Size(max=10) private List<String> names;
10
Validierung von Collections private List<String> names; @Size(max=10) private List<@Pattern(regexp="[a-zA-Z]*") String>
names; @Size(max=10) private List<String> names; 11
Validierung von Collections private List<String> names; @Size(max=10) private List<@Size(max=50) String>
names; @Size(max=10) private List<@Pattern(regexp="[a-zA-Z]*") String> names; @Size(max=10) private List<String> names; 12
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE }) @Retention(RUNTIME) @Repeatable(List.class)
@Documented @Constraint(validatedBy = { }) public @interface Size { ... } Typ-Annotationen (JSR 308) Neuer ElementType TYPE_USE 13
Kaskadierung @Valid private List<Address> addresses; 14
Kaskadierung @Valid private List<Address> addresses; private List<@Valid Address> addresses; 15
Kaskadierung @Valid private List<Address> addresses; private List<@Valid Address> addresses; private
Map<@Valid Comment, @Min(0) @Max(5) Integer> scorePerComment; 16
Kaskadierung @Valid private List<Address> addresses; private List<@Valid Address> addresses; private
Map<@Valid Comment, @Min(0) @Max(5) Integer> scorePerComment; private Address @NotNull @Valid[] addresses; 17
java.util.Optional Neuer ElementType TYPE Auch für StringProperty et al. (JavaFX)
Optional<@Email String> getEmail() { ... }; 18
Eigene Container Spezifische Kollektionstypen (z.B. Google Guava) Andere JVM-Sprachen (Ceylon,
Scala etc.) Unterstützt mittels Extractor-SPI private Table<Year, String, Integer> revenuePerYearAndCategory; 19
Eigene Container Spezifische Kollektionstypen (z.B. Google Guava) Andere JVM-Sprachen (Ceylon,
Scala etc.) Unterstützt mittels Extractor-SPI private Table<Year, String, Integer> revenuePerYearAndCategory; private Table< Year, String, @DecimalMin(value="0", inclusive=false) Integer> revenuePerYearAndCategory; 20
Demo 21.1
class TableValueExtractor implements ValueExtractor<Table<?, ?, @ExtractedValue ?>> { @Override public
void extractValues(Table<?, ?, ?> originalValue, ValueExtractor.ValueReceiver receiver) { for ( Cell<?, ?, ?> cell : originalValue.cellSet() ) { receiver.keyedValue( "<table cell>", new CellKey( cell.getRowKey(), cell.getColumnKey() ), cell.getValue() ); } } } 21.2
java.time API (JSR 310) @Past/@Future erlaubt für java.time.LocalDateTime, ZonedDateTime etc.
@Past private Year inceptionYear = Year.of( 2017 ); 22
java.time API (JSR 310) @Past/@Future erlaubt für java.time.LocalDateTime, ZonedDateTime etc.
@Past private Year inceptionYear = Year.of( 2017 ); @Past(orPresent=true) private Year inceptionYear = Year.of( 2017 ); 23
java.time API (JSR 310) ValidatorFactory vf = Validation.byDefaultProvider() .configure() .clockProvider(
new FixedClockProvider( ZonedDateTime.of( 2016, 6, 15, 0, 0, 0, 0, ZoneId.of( "Europe/Paris" ) ) ) ) .buildValidatorFactory(); 24
Weitere Java 8 Goodies 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; } } 25
Diverses Neue Constraints @NotEmpty, @NotBlank @Email @Positive, @Negative ValidatorFactory implementiert
AutoCloseable try ( ValidatorFactory vf = Validation.buildDefaultValidatorFactory() ) { } 26
JSF 2.3 und JAX-RS 2.1 JSF: Validierung von Class-Level-Constraints JAX-RS
Berücksichtigung des Request Locale Option zur Deaktivierung von Bean Validation 27
Status Spec: Early Draft Referenzimplementierung: Hibernate Validator 6.0 Alpha2 Feedback
erwünscht :-) Public Draft: April Bestandteil von Java EE 8 (Juli 2017) 28
Resourcen Wie mitmachen: API, Spezifikation, TCK, Website: Referenzimplementierung: Alles ist
Open Source (Apache License 2.0) beanvalidation.org/contribute/ github.com/beanvalidation/ github.com/hibernate/hibernate-validator/ 29
30