1

I have a strange problem. I have build a custom exception class and i throw that exception in a try catch block. below are my code samples. Please help me to figure out this problems. These are my exception codes.

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;

}

Following is my Exception 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();
}

And i have created a custom exception following is that one

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);
}

}

this is the place where i throw the exception. This is a restfull web API. But always i got exception in the browser as 500

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

I cannot figure out what causing this issue. Any quick help is appreciate

Saikrishna Rajaraman
  • 3,205
  • 2
  • 16
  • 29

2 Answers2

1

The errorCode of your custom Exception class is entirely different from the HTTP response code.

You need to set the response code manually in your REST controller like:

response.setStatus(HttpServletResponse.SC_BAD_REQUEST);

While this would work, but this might be a questionable practice to do.

Shanu Gupta
  • 3,699
  • 2
  • 19
  • 29
0

There's no connection in your code to what is being sent back to the client.

If you want to send a specific HTTP code back from a servlet, then choose a value from HttpServletResponse as below:

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;
    }
Capn Sparrow
  • 2,030
  • 2
  • 15
  • 32