Classe ErroException:
package screenmatch.modelos;
public class ErroDeConversaoException extends RuntimeException {
private String mensagemErro;
public ErroDeConversaoException(String mensagemErro) {
this.mensagemErro = mensagemErro;
}
@Override
public String getMessage() {
return this.mensagemErro;
}
}
Pequena alteração no construtor:
public Tipo(DadosOmdb dadosOmdb){
this.nome = dadosOmdb.title();
if(dadosOmdb.year().length() > 4){
throw new ErroDeConversaoException("Não foi possível converter o ano de lançamento, por ter mais de 4 caracteres!");
}
this.anoLancamento = Integer.valueOf(dadosOmdb.year());
}
Tratamento de exceptions no main:
try{
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(urlMidia))
.build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
String json = response.body();
System.out.println(json);
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.create();
DadosOmdb dadosMidias = gson.fromJson(json, DadosOmdb.class);
System.out.println(dadosMidias);
Tipo meuTipo = new Tipo(dadosMidias);
System.out.println("--------------------");
System.out.println("Conversão de título: ");
System.out.println(meuTipo);
} catch(NumberFormatException e) {
System.out.println("Erro, de formato de número");
System.out.println(e.getMessage());
} catch(IllegalArgumentException e){
System.out.println("Erro de argumento, verifique o nome do filme");
} catch(ErroDeConversaoException e){
System.out.println(e.getMessage());
}
Consegui mostrar no console as mensagens de erro corretamente para os erros, até consegui criar semelhante ao exemplo, um erro para caso o nome não seja encontrado nas busca dessa forma:
Nova Exception:
package screenmatch.modelos;
public class NomeInvalidoException extends RuntimeException {
private String mensagemErro;
public NomeInvalidoException(String mensagemErro) {
this.mensagemErro = mensagemErro;
}
@Override
public String getMessage() {
return this.mensagemErro;
}
}
E o trecho que mexi no construtor:
public Tipo(DadosOmdb dadosOmdb){
if (dadosOmdb.title()==null){
throw new NomeInvalidoException("Nome do filme/Série inválido, não foi possível encontrar!!!");
}
this.nome = dadosOmdb.title();
Console:
Digite o nome do filme:
NomeInvalido
{"Response":"False","Error":"Movie not found!"}
DadosOmdb[title=null, year=null]
Nome do filme/Série inválido, não foi possível encontrar!!!
Programa finalizado!
Adicionei essa nova exception num útlimo catch no main.