Primavera de arranque cómo devolver mis propios mensajes de error de validación de restricción

omiten eventos:

Necesito tener mi propio cuerpo de la respuesta de error cuando algo va mal con mi solicitud y estoy tratando de utilizar el @NotEmptyatributo del mensaje limitación para devolver el mensaje de error,

Esta es mi clase que devuelve el mensaje de error utilizando el cuerpo que necesito:

package c.m.nanicolina.exceptions;


import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;

@ControllerAdvice
public class CustomResponseEntityExceptionHandler {

    @ExceptionHandler(value = {MissingServletRequestParameterException.class})
    public ResponseEntity<ApiError> handleConflict(MissingServletRequestParameterException ex, WebRequest request) {
        ApiError apiError = new ApiError(ex.getMessage(), ex.getMessage(), 1000);
        return new ResponseEntity<ApiError>(apiError, null, HttpStatus.BAD_REQUEST);
    }
}

Con esto CustomResponseEntityExceptionHandlerpuedo volver a mi propio cuerpo de la respuesta en caso de errores de validación.

Lo que estoy tratando ahora es conseguir que el mensaje de las restricciones de validación.

Este es mi controlador con la NotEmptyrestricción:

package c.m.nanicolina.controllers;

import c.m.nanicolina.models.Product;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.constraints.NotEmpty;

@RestController
public class MinimumStockController {

    @RequestMapping(value = "/minimumstock")
    public Product product(
            @RequestParam(value = "product.sku") @NotEmpty(message = "Product.sku cannot be empty") String sku,
            @RequestParam(value = "stock.branch.id") String branchID) {
        return null;
    }
}

En mi excepción, no puedo encontrar una manera de conseguir ese mensaje Product.sku cannot be emptyy mostrarlo en mi respuesta de error.

También he comprobado la clase MissingServletRequestParameterExceptiony no es el método getMessageque se devuelve el mensaje predeterminado.

Amit Kumar:

Sí es factible y primavera muy bien lo soporta. Usted se acaba perdiendo alguna configuración que le permita en primavera.

  • Uso de Primavera @Validatedde anotación para permitir la primavera hasta el controlador de validación
  • Manija ConstraintViolationExceptionen su ControllerAdvicepara coger todos los mensajes de validación fallidos.
  • Marcos required=falseen @RequestParam, por lo que no va a tirar MissingServletRequestParameterException y más bien pasar a la siguiente etapa de validación restringida.
@ControllerAdvice
public class CustomResponseEntityExceptionHandler {

    @ExceptionHandler
  public ResponseEntity<ApiError> handle(ConstraintViolationException exception) {
        //you will get all javax failed validation, can be more than one
        //so you can return the set of error messages or just the first message
        String errorMessage = new ArrayList<>(exception.getConstraintViolations()).get(0).getMessage();
       ApiError apiError = new ApiError(errorMessage, errorMessage, 1000);    
       return new ResponseEntity<ApiError>(apiError, null, HttpStatus.BAD_REQUEST);
  }
}



@RestController
@Validated
public class MinimumStockController {

    @RequestMapping(value = "/minimumstock")
    public Product product(
            @RequestParam(value = "product.sku", required=false) @NotEmpty(message = "Product.sku cannot be empty") String sku,
            @RequestParam(value = "stock.branch.id", required=false) String branchID) {
        return null;
    }
}

NOTA: MissingServletRequestParameterExceptionno tendrá acceso a los mensajes de validación javax, ya que es lanzada antes de que ocurra validación restringida en la solicitud de ciclo de vida.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=224526&siteId=1
Recomendado
Clasificación