Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro com resolver BackEnd

Bom dia. Estou trabalhando em um projeto pessoal e utilizei resolvers para carregar os componentes da tela. No projeto que havia iniciado não havia resolvers então fazia no onInit. No BackEnd fiz os tratamentos de erros, onde quando no springboot não encontra registro retorna duas mensagens, uma delas é para o usuário. Então, caso na requisição desse erro, pegava o erro e tratava com um componente do primeng. Como poderia fazer com os resolvers? Esse é um dos resolvers que dá EmptyResultDataAccessException que trato. Então como não tenho nada na tabela que busca, não conseguindo converter.

export class ConfigServerResolver implements Resolve<Observable<ConfigServidor[]>> {

  constructor(private configService: CrudPadService<ConfigServidor>) {
  }

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    return this.configService.getValues(urlBase);
  }

}
4 respostas

Quando der um erro, que valor você quer usar por padrão no seu resolver?

gostaria de saber se tem como eu pegar o erro. Vi lá no tour of heroes e acabei implementando pra que o objeto retorne vazio. Assim não dá erro pra tentar abrir o component. Mas o erro que trato no back-end não faço ideia de como pegar quando vem por ali. Fiz assim o Crud Padrão

@Injectable({
  providedIn: 'root'
})
export class CrudPadService <T> {
  constructor(private http: HttpClient) { }

  getValues(url: string) {
    return this.http.get<T []>(url).pipe(catchError(this.handleError('getValues', [])));
  }

/*outros métodos*/

private handleError<T> (operation = 'operation', result?: T) {
    return (error: any): Observable<T> => {
      console.error(error);
      // Let the app keep running by returning an empty result.
      return of(result as T);
    };
  }

Aqui trata e lista o erro no console. Mas, gostaria de pegar essa mensagem de erro.

Aqui o resolver

const urlBase = `${environment.apiUrl}/mobile/confserv`;

@Injectable()
export class ConfigServerResolver implements Resolve<Observable<ConfigServidor[]>> {

  constructor(private configService: CrudPadService<ConfigServidor>) {
  }

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    return this.configService.getValues(urlBase);
  }

}

Erro na mensagem do console.

HttpErrorResponse {headers: HttpHeaders, status: 400, statusText: "OK", url: "http://192.168.88.242:8082/mobile/confserv", ok: false, …}
error
:
Array(1)
0
:
mensagemDesenvolvedor
:
"org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0"
mensagemUsuario
:
"Não há registros a serem exibidos. Será necessário a inclusão de um registro."

Gostaria de pegar a mensagem do usuário para usar em um dos componentes do primeng.

No resolver você não tem o componente carregado ainda, então não há como exibir algo para o usuário da maneira que está pensando.

solução!

Obrigado. Só queria ter certeza se dava pra fazer. Não fiz por resolver e fiz no onInit a requisição e carreguei o formulário nela.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software