JAX-RS @Provider для проверки компонентов CDI - PullRequest
0 голосов
/ 03 июля 2018

Только для тех, кому нужен фрагмент кода, очень полезный для обработки исключения проверки bean-компонентов в JAX-RS REST Web Services.

Saveriu

1 Ответ

0 голосов
/ 03 июля 2018
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.Path;
import javax.validation.constraints.NotNull;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static java.util.Arrays.asList;

@Provider
public class ValidationExceptionMapper  implements ExceptionMapper<ConstraintViolationException> {


    private  <T> List<T> mergeList(@NotNull List<T> l1 , @NotNull List<T> l2 ) {
        return new ArrayList<T>(l1) {{addAll(l2);}};
    }

    @Override
    public Response toResponse(final ConstraintViolationException exception) {

        Map<Path,List<String>> errors =
                exception.getConstraintViolations()
                .stream()
                .collect(
                        Collectors.toMap(
                            ConstraintViolation::getPropertyPath,
                            cv -> asList(cv.getMessage()),
                            this::mergeList
                        )
                );

        return Response.status(Response.Status.BAD_REQUEST)
                .entity(errors)
                .build();
    }



}
...