Как уведомлять клиента об ошибках в Serlvet?

Я делаю приложение на Servlet + ReactJS. И возникла вопрос - как именно организовать уведомление клиента о каких либо ошибках.

Я вижу только два варианта:

  1. В сервисном слое отлавливать исключения(которые выбрасываются вручную в коде или внутри используемых библиотек) и потом возвращать в сервлет сообщение и код результата операции

К примеру:

Servlet:

  @WebServlet("/")
    public class TestServlet extends HttpServlet {
        SomeSerivce service= new SomeSerivce();
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            Message msg=service.someDo(req.getParameter("test"));
            resp.setStatus(msg.getCode());
            PrintWriter printWriter = resp.getWriter();
            printWriter.write(msg.getText());
        }
    }

Некоторый сервис,выполняющий проверку типа параметра get-запроса

public class SomeSerivce {
    public Message someDo(String param){
        Message msg = new Message();
        try {
            int a = Integer.parseInt(param);
        }catch (IllegalArgumentException e){
            msg.setCode(HttpServletResponse.SC_BAD_REQUEST);
            msg.setText("Не верный тип параметра запроса");
            return  msg;
        }catch (Exception e){
            msg.setCode(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            msg.setText("Неизвестная ошибка");
            return  msg;
        }
        msg.setCode(HttpServletResponse.SC_OK);
        msg.setText("Параметр запроса верный");
        return msg;
    }
}

Класс сообщения

 public  class Message{
        private int code;
        private String text;
        .........
    }
  1. Либо же никакие исключения не отлавливать и просто создать отдельные сервлеты,которые будут вызываться при появлении определенных исключений.

Имеется ввиду, использование в web.xml следующей конструкции :

 <error-page>
        <exception-type>java.lang.IllegalArgumentException</exception-type>
        <location>/AppExceptionHandler</location>
    </error-page>

И создание сервлета для пути /AppExceptionHandler

@WebServlet("/AppExceptionHandler")
public class AppExceptionHandler extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
         response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        PrintWriter printWriter = response.getWriter();
        printWriter.write("Some text");
        printWriter.close();
    }
    
}

Какой вариант лучше?Или может быть есть еще какие то?


Ответы (0 шт):