2017-04-10 48 views
0

Controller.java與使用Spring,Angularjs和離子框架工作

在Controller類CORS錯誤掙扎,我已經定義的URL,雖然從瀏覽器訪問其工作的罰款。 但是,當從Ionic程序訪問相同的URL請求時,得到CORS錯誤。由於這個錯誤,我在doFilter方法中添加了必要的內容。但仍然無能爲力。

@RestController 
@RequestMapping("/service") 
public class Controller implements Filter { 

@RequestMapping(value = "/name", method = RequestMethod.POST, 
     headers = "content-type=application/x-www-form-urlencoded",produces="application/json") 
public String reg(@ModelAttribute Farmer farmer) { 

    System.out.println("Getting request from Mobile client...!!" + farmer);//farmer.firstName is null 
    String result = "Hello..!"; 
    System.out.println("Request processed"); 
    return result; 
} 
@Override 
public void destroy() { 
    // TODO Auto-generated method stub 
} 

@Override 
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) 
     throws IOException, ServletException { 
    HttpServletResponse response = (HttpServletResponse) resp; 
    System.out.println("External request start..!!"); 
    response.setHeader("Access-Control-Allow-Origin", "*"); 
    response.setHeader("Access-Control-Allow-Methods", "POST, PUT,GET,DELETE"); 
    response.setHeader("Access-Control-Max-Age", "3600"); 
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); 

    chain.doFilter(req, resp); 
    System.out.println("External request end..!!"); 
} 

@Override 
public void init(FilterConfig arg0) throws ServletException { 
    // TODO Auto-generated method stub 

} 

Farmer.java

public class Farmer { 
private String firstName; 
private String lastName; 
//getters and setters 
} 

我已經編輯我的question.Please做檢查。 謝謝。

+0

什麼是錯誤的日誌? – Karim

回答

0

與大量試驗的準備和參照後examples.Finally固定這個issue.So只是想加入這裏。如果有人可能需要它。

此修復只是通過增加 @ CrossOrigin,@ RestController,消費= 「應用/ JSON」 你 控制器的方法。

@CrossOrigin 
@RestController 
@RequestMapping("/service") 
public class Controller implements Filter { 
@RequestMapping(value = "/name", method = RequestMethod.POST, 
    headers = "content-type=application/x-www-form-urlencoded",consumes="application/json") 

公共字符串REG(@ModelAttribute農民農民){

System.out.println("Getting request from Mobile client...!!" + farmer);//farmer.firstName is null 
String result = "Hello..!"; 
System.out.println("Request processed"); 
return result; 
} 
@Override 
public void destroy() { 
// TODO Auto-generated method stub 
} 

@Override 
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) 
    throws IOException, ServletException { 
HttpServletResponse response = (HttpServletResponse) resp; 
System.out.println("External request start..!!"); 
response.setHeader("Access-Control-Allow-Origin", "*"); 
response.setHeader("Access-Control-Allow-Methods", "POST, PUT,GET,DELETE"); 
response.setHeader("Access-Control-Max-Age", "3600"); 
response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); 

chain.doFilter(req, resp); 
System.out.println("External request end..!!"); 
} 

@Override 
public void init(FilterConfig arg0) throws ServletException { 
// TODO Auto-generated method stub 
} 

謝謝

0

如果您使用chrome,則必須從標誌--disable-web-security開始,或安裝擴展Allow-Control-Allow-Origin: *

這不是代碼問題,當您使用cordova或phonegap構建應用程序時,不會出現錯誤消息。

+0

這裏有一個相關的回覆http://stackoverflow.com/questions/3102819/disable-same-origin-policy-in-chrome –

+0

我已經添加了該擴展名,但仍然搞砸了Allow-Control-Allow-Origin問題。 – Hema

0

這裏是我會怎麼做,將它添加到與componentconfiguration註釋的類:

@Bean 
     public WebMvcConfigurer corsConfigurer() { 
      return new WebMvcConfigurerAdapter() { 
       @Override 
       public void addCorsMappings(CorsRegistry registry) { 
        registry.addMapping("/service/**").allowedOrigins("*").allowedMethods("GET", "POST","PUT", "DELETE"); 


       } 
      }; 
     }