Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Bean Validation 2.0 - Support für Java 8 und mehr

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

More Decks by Gunnar Morling

Other Decks in Programming

Transcript

  1. Was erwartet Euch? Was ist Bean Validation? Was ist neu

    in Bean Validation 2.0? Feedback geben 2
  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
  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
  4. Wiederholbare Annotationen @Size.List({ @Size(min = 8, group = Default.class), @Size(min

    = 12, group = Admin.class) }) private char[] password = ...; 7
  5. 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
  6. 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
  7. @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
  8. Kaskadierung @Valid private List<Address> addresses; private List<@Valid Address> addresses; private

    Map<@Valid Comment, @Min(0) @Max(5) Integer> scorePerComment; 16
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. Diverses Neue Constraints @NotEmpty, @NotBlank @Email @Positive, @Negative ValidatorFactory implementiert

    AutoCloseable try ( ValidatorFactory vf = Validation.buildDefaultValidatorFactory() ) { } 26
  17. 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
  18. Status Spec: Early Draft Referenzimplementierung: Hibernate Validator 6.0 Alpha2 Feedback

    erwünscht :-) Public Draft: April Bestandteil von Java EE 8 (Juli 2017) 28
  19. 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
  20. 30