3
respostas

Erro LocaleContexHolder

Olá professor, a conversão de idioma com o LocaleContextHolder.getLocale, não funcionou.

Poderia me confirmar se as classes estão corretas?

Abaixo segue código.

Obrigado

package br.com.gmartins.resources.exceptions;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.http.HttpStatus;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class ResourceExceptionHandler {

    @Autowired
    private MessageSource messageSource;

    @ResponseStatus(code = HttpStatus.BAD_REQUEST)
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public List<StandardErrorDto> handler(MethodArgumentNotValidException excepetion){

        List<StandardErrorDto> objDto = new ArrayList<>();

        List<FieldError> fieldErrors = excepetion.getBindingResult().getFieldErrors();
        fieldErrors.forEach(e -> {
            String mensagem = messageSource.getMessage(e, LocaleContextHolder.getLocale());
            StandardErrorDto error = new StandardErrorDto(e.getField(), mensagem, System.currentTimeMillis());
            objDto.add(error);
        });

        return objDto;
    }

}
3 respostas

Oi Edson,

O código está correto.

Como você enviou a requisição?

Eu efetuei o teste conforme os passos seguidos na aula, colocando o en-US. Existe algum outra forma para teste ?

Oi Edson,

Você testou no Postman?

Certifique-se que na aba Headers o cabeçalho Accept-Language tem o valor en-US preenchido e que na primeira coluna a checkbox do cabeçalho está marcada.

Era pra funcionar ok, porque seu código está correto e não precisa de nenhuma configuração adicional.