Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling...

31
Bean Validation 2.0 Support für Java 8 und mehr Gunnar Morling, Red Hat 1

Transcript of Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling...

Page 1: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Bean Validation 2.0Support für Java 8 und mehr

Gunnar Morling, Red Hat

1

Page 2: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Was erwartet Euch?Was ist Bean Validation?

Was ist neu in Bean Validation 2.0?

Feedback geben

2

Page 3: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Gunnar MorlingOpensource-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

Page 4: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

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

Page 5: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Demo

5

Page 6: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Bean Validation 2.0 - JSR 380

Einsatz der neuen Sprachfeatures

Unterstützung der API-Erweiterungen

6

Page 7: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Wiederholbare Annotationen

@Size.List({ @Size(min = 8, group = Default.class), @Size(min = 12, group = Admin.class)})private char[] password = ...;

7

Page 8: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

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

Page 9: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Validierung von Collections

private List<String> names;

9

Page 10: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Validierung von Collections

private List<String> names;

@Size(max=10)private List<String> names;

10

Page 11: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

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

Page 12: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

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

Page 13: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

@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

Page 14: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Kaskadierung

@Validprivate List<Address> addresses;

14

Page 15: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Kaskadierung

@Validprivate List<Address> addresses;

private List<@Valid Address> addresses;

15

Page 16: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Kaskadierung

@Validprivate List<Address> addresses;

private List<@Valid Address> addresses;

private Map<@Valid Comment, @Min(0) @Max(5) Integer> scorePerComment;

16

Page 17: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Kaskadierung

@Validprivate List<Address> addresses;

private List<@Valid Address> addresses;

private Map<@Valid Comment, @Min(0) @Max(5) Integer> scorePerComment;

private Address @NotNull @Valid[] addresses;

17

Page 18: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

java.util.Optional

Neuer ElementType TYPE

Auch für StringProperty et al. (JavaFX)

Optional<@Email String> getEmail() { ... };

18

Page 19: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Eigene ContainerSpezifische Kollektionstypen (z.B. Google Guava)

Andere JVM-Sprachen (Ceylon, Scala etc.)

Unterstützt mittels Extractor-SPI

private Table<Year, String, Integer> revenuePerYearAndCategory;

19

Page 20: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Eigene ContainerSpezifische 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

Page 21: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Demo

21.1

Page 22: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

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

Page 23: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

java.time API (JSR 310)@Past/@Future erlaubt für java.time.LocalDateTime,

ZonedDateTime etc.

@Pastprivate Year inceptionYear = Year.of( 2017 );

22

Page 24: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

java.time API (JSR 310)@Past/@Future erlaubt für java.time.LocalDateTime,

ZonedDateTime etc.

@Pastprivate Year inceptionYear = Year.of( 2017 );

@Past(orPresent=true)private Year inceptionYear = Year.of( 2017 );

23

Page 25: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

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

Page 26: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

Weitere Java 8 GoodiesConstraintValidator 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

Page 27: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

DiversesNeue Constraints

@NotEmpty, @NotBlank

@Email

@Positive, @Negative

ValidatorFactory implementiert AutoCloseable

try ( ValidatorFactory vf = Validation.buildDefaultValidatorFactory() ) { }

26

Page 28: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

JSF 2.3 und JAX-RS 2.1JSF: Validierung von Class-Level-Constraints

JAX-RS

Berücksichtigung des

Request Locale

Option zur Deaktivierung

von Bean Validation

27

Page 29: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

StatusSpec: Early Draft

Referenzimplementierung: Hibernate Validator 6.0 Alpha2

Feedback erwünscht :-)

Public Draft: April

Bestandteil von Java EE 8 (Juli 2017)

28

Page 30: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

ResourcenWie 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

Page 31: Bean Validation 2 - DOAG Deutsche ORACLE · PDF fileGunnar Morling Opensource-Softwareentwickler bei Red Hat Div. Hibernate-Projekte Spec Lead für Bean Validation 2.0 Andere Projekte:

30