2015-10-07 3 views
0

У меня есть проект restyGWT + GXT, что отправить запрос на сервер проекта (Spring загрузки), так что, мой restyGWT + GXT часть:Как отправить запрос от части RestyGWT на другой серверный проект?

buiid.gradle:

... 
compile 'org.fusesource.restygwt:restygwt:2.0.3' 
compile 'javax.ws.rs:jsr311-api:1.1.1' 

мой отдых сервис в restyGWT + GXT часть:

import org.fusesource.restygwt.client.MethodCallback; 
import org.fusesource.restygwt.client.RestService; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import java.util.List; 

public interface LoadHelloService extends RestService { 

    @GET 
    @Path("/rest/loadHelloService") 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public void loadHelloService(MethodCallback<List<Hello>> callback); 
} 

боб Hello.java:

public class Hello { 

    private final String id; 
    private final String name; 

    @JsonCreator 
    public Hello(@JsonProperty("id") String id, @JsonProperty("name") String name) { 
     this.id = id; 
     this.name = name; 

    } 

    public String getId() { 
     return id; 
    } 

    public String getName() { 
     return name; 
    } 
} 

в MainMenuPage (implements IsWidget): на клик menuButton1 отправить запрос на проекта сервера (Spring загрузки):

@UiHandler("menuButton1") 
    void selectOnMenu1(SelectEvent event) { 
     ... 
     restServerLoader.loadHelloListFromServer();   
    } 

так, RestServerLoader класс с методом loadHelloListFromServer:

import com.google.gwt.core.client.GWT; 
import com.sencha.gxt.widget.core.client.box.MessageBox; 
import org.fusesource.restygwt.client.*; 

import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

public class RestServerLoader { 

    public void loadHelloListFromServer() { 
     String pageBaseUrl = "http://127.0.0.1:8080/"; 
     Defaults.setServiceRoot(pageBaseUrl); 

     Map<String, String> headers = new HashMap<>(); 
     headers.put("Access-Control-Allow-Methods", "GET"); 

     Resource resource = new Resource(Defaults.getServiceRoot(), headers); 

     LoadHelloService service = GWT.create(LoadHelloService.class); 
     ((RestServiceProxy)service).setResource(resource); 

     service.loadHelloService(new MethodCallback<List<Hello>>() { 

      public void onSuccess(Method method, List<Hello> response) { 
       MessageBox messageBox = new MessageBox("response (list) = " + response.toString()); 
       messageBox.show(); 
       //code your stuff here 
      } 

      public void onFailure(Method method, Throwable exception) { 
       MessageBox messageBox = new MessageBox("exception = " + exception); 
       messageBox.show(); 
       //code your stuff here 
      } 


     }); 
    } 
} 

Так, и когда Я посылаю запрос loadHelloService У меня есть: org.fusesource.restygwt.client.FailedStatusCodeException: status code 0. : ((((((

моего серверной части (весна загрузка) отдых:

import javax.servlet.http.HttpServletResponse; 
import javax.ws.rs.*; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
import java.util.ArrayList; 
import java.util.List; 

@Path("/") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public class HelloResource { 

    @Context 
    private HttpServletResponse response; 


    @OPTIONS 
    @Path("loadHelloService") //The response for the preflight request made implicitly by the bowser 
    public Response loadHelloPreflight() { 
     Response response = Response.ok() 
       .header("Access-Control-Allow-Origin", "*") 
       .header("Access-Control-Allow-Methods", "POST, GET, UPDATE, OPTIONS") 
       .header("Access-Control-Allow-Headers", "*") 
       .header("Access-Control-Max-Age", "18000").build(); 

     return response; 
    } 

    @GET 
    @Path("loadHelloService") 
    public List<Hello> loadHelloList() { 
     response.addHeader("Access-Control-Allow-Origin", "*"); 
     response.addHeader("Access-Control-Allow-Methods", "POST, GET, UPDATE, OPTIONS"); 
     response.addHeader("Access-Control-Allow-Headers", "*"); 

     List<Hello> list = new ArrayList<>(); 
     list.add(new Hello("1", "ronan")); 
     list.add(new Hello("2", "john")); 
     return list; 
    } 

} 

так, Когда я посылаю запрос, я метод ввода loadHelloPreflight, но когда отправить запрос на loadHelloList у меня есть: org.fusesource.restygwt.client.FailedStatusCodeException: status code 0., почему ??? : ((, Когда я отправляю запрос серверной части (Spring Boot) из браузера Postman Client - все хорошо !, Я получаю список приветствий, но я хочу сделать это от restyGWT + GXT part: (((Помогите мне , пожалуйста.

ответ

0

вы забыли некоторые Корс заголовки, как показано ниже?

.header("Access-Control-Allow-Headers", "x-http-method-override");