我的自定义异常不是 return 在异常代码中(代码总是 return 500)
My custom exception is not returning the exception code ( code is return 500 always)
我有一个奇怪的问题。我已经构建了一个自定义异常 class 并且我在 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;
}
以下是我的例外情况class
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();
}
我不知道是什么导致了这个问题。感谢任何快速帮助
您的 自定义异常 class 的 errorCode
与 HTTP response code.
完全不同
您需要在 REST 控制器中手动设置响应代码,例如:
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
虽然这可行,但这可能是一个有问题的做法。
您的代码与发送回客户端的内容无关。
如果您想从 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;
}
我有一个奇怪的问题。我已经构建了一个自定义异常 class 并且我在 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;
}
以下是我的例外情况class
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();
}
我不知道是什么导致了这个问题。感谢任何快速帮助
您的 自定义异常 class 的 errorCode
与 HTTP response code.
您需要在 REST 控制器中手动设置响应代码,例如:
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
虽然这可行,但这可能是一个有问题的做法。
您的代码与发送回客户端的内容无关。
如果您想从 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;
}