【问题标题】:My custom exception is not returning the exception code ( code is return 500 always)我的自定义异常没有返回异常代码(代码总是返回 500)
【发布时间】:2018-09-19 04:41:07
【问题描述】:

我有一个奇怪的问题。我已经构建了一个自定义异常类,并在 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);
}

}

这是我抛出异常的地方。这是一个完整的 Web API。但我总是在浏览器中遇到异常 500

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

我无法弄清楚导致此问题的原因。任何快速帮助表示感谢

【问题讨论】:

  • 我认为您将错误代码与 HTTP 响应代码混淆了

标签: java rest api service custom-exceptions


【解决方案1】:

您的自定义异常类errorCodeHTTP response code.完全不同

您需要在 REST 控制器中手动设置响应代码,例如:

response.setStatus(HttpServletResponse.SC_BAD_REQUEST);

虽然这可行,但这可能是一个值得商榷的做法。

【讨论】:

    【解决方案2】:

    您的代码与发送回客户端的内容没有任何联系。

    如果您想从 servlet 发回特定的 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;
        }
    

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多