从angular调用基于java的API时出错

问题描述 投票:0回答:2

在Visual Studio代码中使用STS调用java api构建并从角度调用spring MVC,我们收到此错误:

从'null'访问'http://localhost:8081/HelloWorld/list'的XMLHttpRequest已被CORS策略阻止:请求的资源上没有'Access-Control-Allow-Origin'标头。

可能未处理的拒绝:{“data”:null,“status”: - 1,“config”:{“method”:“GET”,“transformRequest”:[null],“transformResponse”:[null],“jsonpCallbackParam” :“callback”,“url”:“http://localhost:8081/HelloWorld/list”,“headers”:{“Accept”:“application / json,text / plain,/”}},“statusText”:“”,“xhrStatus”:“error” }

angular
2个回答
2
投票

让我们考虑你的角度应用程序在端口号9000上运行。现在,如果你想调用你的Spring API(在不同的端口运行),那么你需要在控制器上添加下面的注释。

@CrossOrigin(origins = "http://localhost:9000")

如果适合您或其他方式,请告诉我。


0
投票

spring3co燃烧filter.Java

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Spring3CorsFilter {}

spring3co燃烧filter handler interceptor.Java

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class Spring3CorsFilterHandlerInterceptor extends HandlerInterceptorAdapter {


     @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
                Exception {

            if (handler instanceof HandlerMethod) {
                HandlerMethod handlerMethod = (HandlerMethod) handler;
                // Test if the controller-method is annotated with @Spring3CORSFilter
                Spring3CorsFilter filter = handlerMethod.getMethod().getAnnotation(Spring3CorsFilter.class);
                if (filter != null ) {
                    // ... do the filtering
                    response.setHeader("Access-Control-Allow-Origin", "http://localhost:4200");
                    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
                    response.setHeader("Access-Control-Max-Age", "3600");
                    response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
                }
            }
            return true;
        }

}

controller.Java

@Spring3CorsFilter
    @ResponseBody
    @RequestMapping(value = "/search", method = RequestMethod.GET,headers="Accept=application/json")
    public List <SuiviCommande> getSearch() int L, @RequestBody SuiviCommandeDto A) {

         ....

    }
© www.soinside.com 2019 - 2024. All rights reserved.