Spring boot возвращает 400 отсутствующего конструктора без трассировки стека - PullRequest
0 голосов
/ 22 октября 2018

У меня есть пост-звонок с

public Test postTest(@RequestBody Test test) {
}


public class Test {
    @JsonProperty("EMAIL_ADDRESS")
    @NotNull(message = "EMAIL_ADDRESS_NOT_NULL")
    @Size(min = 1, message = "EMAIL_ADDRESS_NOT_EMPTY")
    @Email(flags = Flag.CASE_INSENSITIVE, message = "EMAIL_INVALID")
    private String emailAddress;

    public ForgetPassword(
            @NotNull(message = "EMAIL_ADDRESS_NOT_NULL") @Size(min = 1, 
            message = "EMAIL_ADDRESS_NOT_EMPTY") @Email(flags = 
            Flag.CASE_INSENSITIVE, 
            message = "EMAIL_INVALID") String emailAddress) {
        super();
        this.emailAddress = emailAddress;
    }

    public String getEmailAddress() {
        return emailAddress;
    }

    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }
}

Мне не хватало конструктора по умолчанию, и он продолжал возвращать неверный запрос, когда я пытался сделать пост.Если я добавлю конструктор по умолчанию, он работает.Он даже не создает трассировку стека.Я использую пользовательский шаблон для отправки ответа. Я перезаписываю исключение BadRequestException, чтобы отправить обратно пользовательское сообщение.

@ResponseStatus(HttpStatus.BAD_REQUEST)
public class BadRequestException extends RuntimeException {
    public BadRequestException(String message) {
        super(message);
    }
}

Есть ли какой-либо метод, который я должен переопределить, чтобы перехватывать такие исключения.Я хочу знать, почему что-то идет не так, и видеть стековую расстановку.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы можете объявить класс, как показано ниже, для обработки исключений.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class GlobalExceptionHandler {
    private static Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(Exception.class)
    @ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR, reason="Error processing the request, please check the logs")
    public void handleException(Exception e) {
        LOGGER.error("Exception occurred", e);
    }
}
0 голосов
/ 22 октября 2018

Вы можете определить Global Exceptional Handler, используя @ControllerAdvice.Вы можете разместить столько обработчиков, используя @ExcecptionHandler.Вы можете войти в errorTrace для отладки.

package com.startwithjava.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class ApiExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<Object> handlerGenericError(Exception ex){
        ex.printStackTrace();
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
    @ExceptionHandler(BadRequestException.class)
    public ResponseEntity<Object> handlerBadRequest(BadRequestException ex){
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...