Skip to content

A library for Feign containing a decorator which makes it possible to validate reponses using validation-api (JSR349 and JSR380)

License

Notifications You must be signed in to change notification settings

mwiede/feign-validation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

feign-validation travis status Maven Central

A library for Feign containing a decorator which makes it possible to validate reponses using bean validation api 1.1 (JSR 349) or bean validation 2.0 (JSR 380).

While Jersey as the JAX-RS implementation provides Bean Validation Support, Feign acts as a client and til now only supports a limited set of annotations in it's JAX-RS module, meaning @javax.validation.Valid or @javax.validation.groups.ConvertGroup are not supported.

This library contains a decorator class, which can be setup within invocationHandlerFactory to retrieve additional validation.

Motivation

Sometimes it is required, that a client also validates the response it got from the providing service/endpoint. With JSR-349 bean validation, Java provides a nice api for validation purposes. Just by adding annotations like @NotNull or @Email, contraints can be validated very easily. With JSR-380 you even get support for new date/time data types (JSR 310) and more.

Versions

feign-validation Version JSR Validation Api Version
1.x JSR-349 support javax.validation:validation-api:1.1.0.Final
2.x and beyond JSR-380 support javax.validation:validation-api:2.0.1.Final

Example

Here is how you can activate bean validation within Feign wrapper client:

interface GitHub {
    @RequestLine("GET /repos/{owner}/{repo}/contributors")
    @Size(min = 1)
    @Valid
    List<Contributor> contributors(@Param("owner") String owner, @Param("repo") String repo);

}

static class Contributor {
    @NotNull
    @Size(min = 10)
    String login;
    int contributions;
}

public static void main(String... args) {

    Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

    GitHub github = ExtendedFeign.builder(validator)//
            .decoder(new GsonDecoder()).target(GitHub.class, "https://api.github.com");

    // Fetch and print a list of the contributors to this library.
    try {
        List<Contributor> contributors = github.contributors("OpenFeign", "feign");
        for (Contributor contributor : contributors) {
            System.out.println(contributor.login + " (" + contributor.contributions + ")");
        }
    } catch (ConstraintViolationException ex) {
        ex.getConstraintViolations().forEach(System.out::println);
    }

}

Download

With JSR-380 support:

<dependency>
  <groupId>com.github.mwiede</groupId>
  <artifactId>feign-validation</artifactId>
  <version>2.0</version>
</dependency>

With JSR-349 support:

<dependency>
  <groupId>com.github.mwiede</groupId>
  <artifactId>feign-validation</artifactId>
  <version>1.0</version>
</dependency>

About

A library for Feign containing a decorator which makes it possible to validate reponses using validation-api (JSR349 and JSR380)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages