1
resposta

Problema de Enconding no Spring Boot

Configurei todo o projeto para UTF-8, mas na hora de receber o MultipartFile vem com defaultCharset = "ISO8859-1".

Já testei com Postman: Content-Type - multipart/form-data;boundary=12345;charset=UTF-8

Obs: Tenho que receber um arquivo MultipartFile e uma string separados, não dá para mandar no Body porque envio um formData e não é somente JSON. Já testei com @RequestPart, @RequestParam e @ModelAttribute.

    @Transactional
    @PostMapping(consumes = { "multipart/form-data" })
    public ResponseEntity<ProdutoDTO> cadastrar(@RequestPart(value = "file") MultipartFile arquivo, 
            @RequestParam(value="data", required = true) @Valid String form, UriComponentsBuilder uriBuilder) throws IOException  {
        // implementação 
    }
    @Bean
    public FilterRegistrationBean<CharacterEncodingFilter> encodingFilterRegistration() {
        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
        encodingFilter.setEncoding("UTF-8");
        encodingFilter.setForceEncoding(true);
        FilterRegistrationBean<CharacterEncodingFilter> filterRegistrationBean = new FilterRegistrationBean<CharacterEncodingFilter>(
                encodingFilter);
        filterRegistrationBean.setName("CharacterEncodingFilter");
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.setAsyncSupported(true);
        return filterRegistrationBean;
    }
1 resposta

Oi Matias,

Era pra ter funcionado essa configuração de UTF-8 com o FilterRegistrationBean. Talvez tenha alguma outra configuração específica para upload.

Você pode tentar também forçar o encoding para UTF-8 no controller, utilizando a API do java.io do Java ao ler o arquivo. Algo como:

InputStreamReader isr = new InputStreamReader(arquivo.getInputStream(), StandardCharsets.UTF_8);