3
respostas

CORS no Spring & Angular2+

Olá pessoal, como vão? Estou querendo criar um app simples para meu portfólio.

Mas, estou com problema de CORS.

Eu consigo fazer um GET no angular, mas não consigo fazer POST. Vejam meu java:

package br.com.jp.ab.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import br.com.jp.ab.model.Employee;
import br.com.jp.ab.repository.EmployeeRepository;

@Controller
public class EmployeeController {

    @Autowired
    private EmployeeRepository repository;

    @PostMapping("/employees")
    @CrossOrigin(methods= RequestMethod.POST, origins= {"http://localhost:4200"})
    public void saveEmployee(@RequestParam("nome") String nome,
                @RequestParam("sobrenome") String sobrenome,
                @RequestParam("participação") int participacao) {
        Employee employee = new Employee(nome, sobrenome, participacao);
        this.repository.save(employee);        

    }

    @GetMapping("/employees")
    @CrossOrigin
    public ResponseEntity<List<Employee>> getFuncionarios(){
        return ResponseEntity.ok().body(this.repository.findAll());
    }
}

No angular eu tenho o proxy.config.js na raiz do projeto. Mesmo assim não consigo fazer POST

const proxy = [
    {
      context: '/api',
      target: 'http://localhost:8080',
      pathRewrite: {'^/api' : ''}
    }
  ];
  module.exports = proxy;

Alguém sabe o que me falta?

3 respostas

Fala Marcos, tudo bem?

Do lado backend da sua aplicação que utiliza Spring é necessário configurar o CORS:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**")
                .allowedOrigins(
                        "http://localhost:3000",..)
                .allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD")
                .allowCredentials(true)
        ;
    }

}

Abraço!

Infelizmente, isso não é suficiente para fazer um post

Você pode usar um banco de dados pra comunicar entre duas páginas de domínio diferente.