1
resposta

Erro ao retornar dados no formato JSON

Bom dia,

Estou fazendo uma requisição no servidor spring mvc utilizando Ajax no jQuery, porém gera um erro.

O método que estou buscando é este.

@RequestMapping(value="/listaDeLeis")
@ResponseBody
public List<Lei> listaDeLeis(){
    return (List<Lei>) leiRepositorio.findAll();
}

A requisição via Ajax pelo jQuery é esta

function buscarDados() {
    $.get("http://localhost:8080/transparencia/leis/listaDeLeis", function(data){
        console.log(data);        
    });
}

E o erro gerado é este.

insira seu código aquiaDeLeis. Redirect from 'http://localhost:8080/transparencia/leis/listaDeLeis' to 'http://localhost:8080/transparencia/login' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

Dei uma pesquisada no google sobre o erro e achei no site http://stackoverflow.com/ uma solução que foi

Na minha classe de configuração

@EnableWebMvc
@Configuration
@ComponentScan(basePackages="br.com.sigop.transparencia")
public class ConfiguracaoWeb extends WebMvcConfigurerAdapter {

...

// Estas são as urls que o spring security não valida
@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("cliente/index");
    registry.addViewController("/login").setViewName("cliente/login");
    registry.addViewController("/sucesso").setViewName("cliente/sucesso");
    registry.addViewController("/empenho").setViewName("cliente/empenho/listagem");
}

// Dizia para colocar este código
@Override
public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
}

Creio que seja o spring security que está bloqueando pois eu tenho umas urls que não passam pelo spring security e consigo carregar os jsons que é o caso do empenho.

1 resposta

Ola rhelcris, tudo bem ?

Tente anotar o controller que contém essa action com @CrossOrigin. Essa annotation tem justamente o funcionamente de dizer ao Spring que ele pode aceitar requisições de cross origin (ou de outros servidores, que querem consumir sua api).

Abraço!