Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Bean Validation 2.0 - Support für Java 8 und mehr
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Gunnar Morling
March 28, 2017
Programming
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
More Decks by Gunnar Morling
See All by Gunnar Morling
Hardwood: Building a Parquet Library From Scratch (With a Little Help From AI) -- Devoxx Belgium 2026
gunnarmorling
1
73
Hardwood: Building a Parquet Library From Scratch (With a Little Help From AI)
gunnarmorling
0
57
Transactional Change Stream Processing With Debezium and Apache Flink
gunnarmorling
1
440
Hardwood: Building a Parquet Parser From Scratch (With a Little Help From AI)
gunnarmorling
1
250
Mastering Postgres Replication Slots: Preventing WAL Bloat and Other Production Issues (JavaZone 2025)
gunnarmorling
0
160
Ins and Outs of the Outbox Pattern
gunnarmorling
1
1.3k
1BRC–Nerd Sniping the Java Community
gunnarmorling
0
190
Data Contracts In Practice With Debezium and Apache Flink
gunnarmorling
1
990
1BRC – Nerd Sniping the Java Community (JavaZone)
gunnarmorling
0
200
Other Decks in Programming
See All in Programming
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
190
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
620
AWS CDKを理解するために公式の定義を深掘って解説してみる / Understanding AWS CDK by Digging into Its Official Definition
akihisaikeda
3
280
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
110
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
Distance field of Julia set
kinakomoti321
0
290
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
140
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
120
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
530
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
150
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
170
SODA - FACT BOOK(JP)
sodainc
1
40k
Featured
See All Featured
Navigating Team Friction
lara
192
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
370
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.7k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
470
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.2k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
660
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
570
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
480
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