All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kiwiproject.jaxrs.KiwiJaxrsValidations Maven / Gradle / Ivy

Go to download

Kiwi is a utility library. We really like Google's Guava, and also use Apache Commons. But if they don't have something we need, and we think it is useful, this is where we put it.

There is a newer version: 4.5.2
Show newest version
package org.kiwiproject.jaxrs;

import static java.util.Objects.isNull;
import static org.apache.commons.lang3.StringUtils.isBlank;
import static org.kiwiproject.collect.KiwiSets.isNotNullOrEmpty;
import static org.kiwiproject.logging.LazyLogParameterSupplier.lazy;

import com.google.common.annotations.VisibleForTesting;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.kiwiproject.jaxrs.exception.JaxrsBadRequestException;
import org.kiwiproject.jaxrs.exception.JaxrsValidationException;
import org.kiwiproject.validation.KiwiConstraintViolations;
import org.kiwiproject.validation.KiwiValidations;

import javax.validation.ConstraintViolation;
import javax.validation.groups.Default;
import java.util.Map;
import java.util.Set;

/**
 * Static utility methods that perform validation on an object or value, and throw an appropriate
 * subclass of {@link org.kiwiproject.jaxrs.exception.JaxrsException JaxrsException} if there are validation errors.
 */
@UtilityClass
@Slf4j
public class KiwiJaxrsValidations {

    @VisibleForTesting
    static final String MISSING_VALUE_MESSAGE = "Missing required value";

    /**
     * Assert that the given object is valid using the default validation group.
     *
     * @param id  the unique identity or ID of the object being validated
     * @param obj the object to validate
     * @param  the type of object
     * @throws JaxrsValidationException if there are any validation errors
     * @see Default
     */
    public static  void assertValid(String id, T obj) {
        assertValid(id, obj, Default.class);
    }

    /**
     * Assert that the given object is valid using the specified validation group classes.
     * 

* Note that if you want the default validation group included, it must be in {@code groupClasses}. * * @param id the unique identity or ID of the object being validated * @param obj the object to validate * @param groupClasses validation groups to apply during validation * @param the type of object * @throws JaxrsValidationException if there are any validation errors */ public static void assertValid(String id, T obj, Class... groupClasses) { var violations = KiwiValidations.validate(obj, groupClasses); if (isNotNullOrEmpty(violations)) { debugLogValidationErrors(id, obj, violations); throw new JaxrsValidationException(id, violations); } } /** * Assert that the given object is valid using the default validation group and the specified property path * map, which allows callers to translate property paths (e.g. firstName) to a human-readable * names (e.g. First Name). * * @param id the unique identity or ID of the object being validated * @param obj the object to validate * @param propertyPathMappings mapping from property path to (human-readable) field name * @param the type of object * @throws JaxrsValidationException if there are any validation errors * @see Default */ public static void assertValid(String id, T obj, Map propertyPathMappings) { assertValid(id, obj, propertyPathMappings, Default.class); } /** * Assert that the given object is valid using the specified validation group classes and property path * map. *

* Note that if you want the default validation group included, it must be in {@code groupClasses}. * * @param id the unique identity or ID of the object being validated * @param obj the object to validate * @param propertyPathMappings mapping from property path to (human-readable) field name * @param groupClasses validation groups to apply during validation * @param the type of object * @throws JaxrsValidationException if there are any validation errors */ public static void assertValid(String id, T obj, Map propertyPathMappings, Class... groupClasses) { var violations = KiwiValidations.validate(obj, groupClasses); if (isNotNullOrEmpty(violations)) { debugLogValidationErrors(id, obj, violations); throw new JaxrsValidationException(id, violations, propertyPathMappings); } } private static void debugLogValidationErrors(String id, T obj, Set> violations) { LOG.debug("Encountered validation errors for {} (id: {}): {}", obj.getClass().getSimpleName(), id, lazy(() -> KiwiConstraintViolations.simpleCombinedErrorMessage(violations))); } /** * Assert that the given String value is not blank. * * @param fieldName the field name being validated * @param value the String value to check * @throws JaxrsBadRequestException if the value is blank * @implNote Blank check is performed using {@link org.apache.commons.lang3.StringUtils#isBlank(CharSequence)}) */ public static void assertNotBlank(String fieldName, String value) { if (isBlank(value)) { throw new JaxrsBadRequestException(MISSING_VALUE_MESSAGE, fieldName); } } /** * Assert that the given Object is not null. * * @param fieldName the field name being validated * @param value the value to check * @throws JaxrsBadRequestException if the value is null */ public static void assertNotNull(String fieldName, Object value) { if (isNull(value)) { throw new JaxrsBadRequestException(MISSING_VALUE_MESSAGE, fieldName); } } /** * Asserts that the given boolean value is true. * * @param value the value to check * @param message the message to use in the thrown exception * @throws JaxrsBadRequestException if the value is false */ public static void assertTrue(boolean value, String message) { if (!value) { throw new JaxrsBadRequestException(message); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy