Мое пользовательское исключение не возвращает код исключения (код всегда возвращает 500) - PullRequest
0 голосов
/ 19 сентября 2018

У меня странная проблема.Я создал собственный класс исключений, и я выбрасываю это исключение в блоке try catch.ниже приведены мои примеры кода.Пожалуйста, помогите мне разобраться с этой проблемой.Это мои коды исключений.

public class DWExceptionCodes {
public static final int NO_AGENT_FOUND = 400;
public static final int AGENT_ALREADY_EXISTS = 401;
public static final int INCOMPLEATE_DATA = 402;
public static final int SUBSCRIBER_ALREADY_EXISTS = 403;
public static final int AGENT_VALIDATION_FAILED = 404;
public static final int NO_SUBSCRIBER_FOUND = 405;
public static final int TRANSACTION_FAILED = 409;

}

Ниже приведен мой класс исключений

public class DWException extends Exception{
private static final long serialVersionUID= 100L;

private String errorMessage;
private int errorCode;

public String getErrorMessage() {
    return errorMessage;
}
public int getErrorCode(){
    return errorCode;
}
public DWException(String errorMessage) {
    super(errorMessage);
    this.errorMessage = errorMessage;
}
public DWException(String errorMessage, int errorCode) {
    super(errorMessage);
    this.errorMessage = errorMessage;
    this.errorCode=errorCode;
}
public DWException() {
    super();
}

И я создал собственное исключение, следующее за которым

public class SubscriberAlreadyExistsException extends DWException{
private static final long serialVersionUID = 1L;
private static String errorMessage = "Subscriber already exists";
private static int errorCode = DWExceptionCodes.SUBSCRIBER_ALREADY_EXISTS;

public SubscriberAlreadyExistsException() {
    super(errorMessage, errorCode);
}

}

это место, где я выкидываю исключение.Это полноценный веб-API.Но всегда я получаю исключение в браузере как 500

if (agentService.findByNumberAndPin(agentNumber, pin) != null) {
                if (dbsubscriber != null) {
                    throw new SubscriberAlreadyExistsException();
                }

Я не могу понять, что вызвало эту проблему.Любая быстрая помощь ценится

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

В вашем коде нет связи с тем, что отправляется обратно клиенту.

Если вы хотите отправить определенный HTTP-код обратно из сервлета, выберите значение из HttpServletResponse, как показано ниже:

import javax.servlet.http.HttpServletResponse;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  if (agentService.findByNumberAndPin(agentNumber, pin) != null) {
      if (dbsubscriber != null) {
        // returns 403
        response.sendError(HttpServletResponse.SC_FORBIDDEN);
        return;
    }
0 голосов
/ 19 сентября 2018

errorCode вашего пользовательского класса исключений полностью отличается от HTTP-кода ответа.

Вам необходимо вручную установить код ответа в RESTконтроллер вроде:

response.setStatus(HttpServletResponse.SC_BAD_REQUEST);

Хотя это будет работать, но это может быть сомнительной практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...