猿问

Angular2 / Spring Boot允许在PUT上交叉原点

我的Web应用程序存在一个小问题:一个与spring boot API连接的angular2应用程序。


我无法从angular2应用访问我的请求。我收到此错误:


Failed to load http://localhost:8080/deliveryMan/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.

Java代码:


@RestController

@RequestMapping(value = "/deliveryMan")

@CrossOrigin

public class DeliveryManController {


    @Autowired

    DeliveryManService deliveryManService;


    @RequestMapping(value = "/getAllDeliveryMan", method = RequestMethod.GET)

    public Iterable<DeliveryMan> getAllDeliveryMan(){

        return deliveryManService.findAll();

    }


    @RequestMapping(method = RequestMethod.PUT, consumes = "application/json")

    public DeliveryMan addDeliveryMan(@RequestBody DeliveryMan deliveryMan) throws InvalidObjectException {

        deliveryManService.save(deliveryMan);

        return deliveryMan;

    }


@SpringBootApplication

@EnableAutoConfiguration

@ComponentScan

public class MyApp{


    public static void main(String[] args) {

        SpringApplication.run(MyApp.class, args);

    }

}

angular2代码:


private apiUrl = 'http://localhost:8080/deliveryMan/';


getAll(): Promise<DeliveryMan[]> {

  const url = this.apiUrl + 'getAllDeliveryMan';

  return this.http.get(url)

    .toPromise()

    .then(response => response.json().data as DeliveryMan[])

    .catch(this.handleError);

}


saveDeliveryMan(deliveryMan: DeliveryMan): Promise<DeliveryMan> {

  const url = this.apiUrl;

  return this.http.put(url, JSON.stringify(deliveryMan), this.headers)

    .toPromise()

    .then(() => deliveryMan)

    .catch(this.handleError);

}

为了解决该问题,我在控制器类中添加了@CrossOrigin。它解决了getAll方法的问题,但没有解决其他方法的问题。


如何解决它,以便我可以使用PUT方法而不会出现此错误?


冉冉说
浏览 566回答 3
3回答

犯罪嫌疑人X

@CrossOrigin(origins = "http://localhost:4200")向您的控制器添加注释,例如:@CrossOrigin(origins = "http://localhost:4200")@RequestMapping(method = RequestMethod.PUT, consumes = "application/json")&nbsp; &nbsp; public DeliveryMan addDeliveryMan(@RequestBody DeliveryMan deliveryMan) throws InvalidObjectException {&nbsp; &nbsp; &nbsp; &nbsp; deliveryManService.save(deliveryMan);&nbsp; &nbsp; &nbsp; &nbsp; return deliveryMan;&nbsp; &nbsp; }

慕仙森

您可以只使用:(它对所有CRUD操作都适用)@CrossOrigin(origins = "*")
随时随地看视频慕课网APP
我要回答