Как обрабатывать и сообщать клиенту исключения веб-службы? - PullRequest
0 голосов
/ 18 января 2019

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

Метод, который предоставляет веб-сервис:

//web service com springboot
    @PostMapping(value = "/save", produces = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE},
                    consumes = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE})
    public Pessoa save(@RequestBody Pessoa pessoa) {    
        // email field is unique, might throw constraint violation...   
            return pessoaRepository.save(pessoa);               
    }

и клиентское приложение, которое его использует (без пружины, просто javaEE Client API):

public Pessoa savePessoa(Pessoa pessoa) {
    Client client = ClientBuilder.newClient();
    WebTarget target = client.target(URL_WS+ "/save");

    Entity<Pessoa> data = Entity.entity(pessoa, MediaType.APPLICATION_XML_TYPE);

    pessoa = target.request(MediaType.APPLICATION_XML_TYPE).post(data, Pessoa.class);

    return pessoa;
}

Поле электронной почты Pessoa уникально, и при сохранении может вызвать некоторое исключение нарушения ограничения. Если есть исключение, как я могу правильно сообщить об этом клиенту?

1 Ответ

0 голосов
/ 18 января 2019

Создать класс исключений

public class PessoaException extends RuntimeException { 
   public PessoaException(String exception) {
    super(exception);
      }
    }

измените код услуги, как показано ниже: -

 @PostMapping(value = "/save", produces = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE},
                    consumes = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE})
    public Pessoa save(@RequestBody Pessoa pessoa) {    
        // email field is unique, might throw constraint violation... 
            try{
            Pessoa p = pessoaRepository.save(pessoa);
            }catch(Exception e){
                throw new PessoaException("Message" + e);
            }   
            return p;               
    }
...