簡體   English   中英

從javascript獲取呼叫無法到達Java REST服務

[英]fetch call from javascript unable to reach java REST service

我正在學習REST API,並嘗試使用fetch從Javascript調用用Java編寫的POST服務。 當@Produces和@Consumes為MediaType.APPLICATION_JSON時,請求未到達服務

我還在同一API中定義了其他簡單的POST和GET方法,這些方法可以正常工作,但是當我必須發送和接收JSON數據時,這種方法無法正常工作。

以下是我的提取調用:

    let options = {
    method: "POST",
    headers: new Headers({'content-type': 'application/json'}),
    body: JSON.stringify({
          "Title": "title"
          })
    };
    const url = "http://localhost:8080/myserver/data/list";
    return fetch(url, options);

以下是我的REST API:

 @Path("/data")
 public class Controller {
 @POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/list")
public Response createList(CreateListJsonData dta) throws IOException {
System.out.println("in create list");
return Response.status(200)
            .entity("{\"dummykey\"}:\"dummyVal\"")
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT")
            .build();
}

CreateListJsonData類如下:

 @XmlRootElement
 public class CreateListJsonData {
    private String Title;
    public String getTitle() {
        return Title;
    }
    public void setTitle(String title) {
        Title = title;
    }
 }

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>myserver</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.myserver</param-value>
    </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

我在Eclipse的tomcat上運行API。 當我觸發請求時,控制台上顯示以下消息:

 com.sun.jersey.server.wadl.generators.AbstractWadlGeneratorGrammarGenerator attachTypes
 INFO: Couldn't find grammar element for class javax.ws.rs.core.Response

有人可以幫我弄清楚我的錯誤嗎?

這看起來像是跨域的情況, CORS

使用此內容類型,該請求不再是“簡單”的,而是一個預檢請求 它要求您的服務器處理OPTIONS方法(除了您處理的POST)。 請參閱鏈接的文章以獲取需要返回的標題。 通常,如下所示:

Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Allow-Origin: *

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM