leandromoraesrj / sincad-backend

PROJETO BASE DE EXEMPLO USANDO AS MELHORES PRATICAS DE DESENVOLVIMENTO
0 stars 0 forks source link

Criar propierties de mensagens e rotulos #37

Open leandromoraesrj opened 2 years ago

leandromoraesrj commented 2 years ago

É necessário incluir a dependência:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Para mostrar mensagens personalizadas e específicas de localidade, podemos fornecer um espaço reservado conforme mencionado para a anotação @NotEmpty .

A propriedade email.notempty será resolvida a partir de um arquivo de propriedades pela configuração MessageSource:

public class LoginForm {
    @NotEmpty(message = "{email.notempty}")
    @Email
    private String email;

    @NotNull
    private String password;
}

Para obter o texto, segue exemplo utilizado no resource:

@RestController
@RequestMapping(path = "/api/v1/dominios/localidades")
public class LocalidadeResource {
    @Autowired
    private MessageSource messageSource;

    @GetMapping("/")
    public ResponseEntity<?> findAll() {
        List<Localidade> lst = serv.findAll();

        System.out.println(messageSource.getMessage("contribuinte.cpfOuCnpjOuInscricao", null, "testando msg default", new Locale("en", "US")));

        return (!lst.isEmpty() ? ResponseEntity.ok(lst) : ResponseEntity.notFound().build());
    }
}

Para definir o Locale default: Locale.getDefault()

ReloadableResourceBundleMessageSource é a implementação MessageSource mais comum que resolve mensagens de pacotes de recursos para diferentes localidades e é capaz de recarregar as definições de mensagens sem reiniciar a máquina virtual.

@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource
      = new ReloadableResourceBundleMessageSource();

    messageSource.setBasename("classpath:messages");
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
}

OBS: é importante fornecer o nome base, pois os nomes de arquivo específicos da localidade serão resolvidos com base no nome fornecido.

Será necessário criar um arquivo de propriedades no diretório src/main/resources com o nome fornecido no nome base:

# messages.properties
email.notempty=Azul, Vermelho

Para a internacionalização das mensagens, se queremos mostrar mensagens para um usuário francês em seu idioma. Será necessário adicionar mais um arquivo de propriedade com o nome de messages_en_US.properties no mesmo local:

# messages_en_US.properties
email.notempty=Blue, red

Referência: https://zetcode.com/spring/messagesource/

Rerefência: https://www.baeldung.com/spring-custom-validation-message-source

Rerefência: https://www.baeldung.com/spring-boot-bean-validation