Java 调用maven项目时的混乱

Java 调用maven项目时的混乱,java,maven,google-chrome,Java,Maven,Google Chrome,我有一个maven项目,它正在我的系统上成功运行。这个maven项目接受任何web URL作为输入。现在,每当单击我的chrome扩展时,我都想调用这个Maven项目。我的chrome扩展能够获取网站的URL 那我该怎么做呢?在搜索google和许多其他资源时,我开始意识到我必须创建一个能够监听客户端行为的restful web服务 但我仍然不清楚该怎么做?我连最初的步骤都不清楚 任何想法都会对我大有帮助 我对REST端点/邮递员一无所知,这只是我收集的信息 p.S如果我描述的场景不清楚,请评论

我有一个maven项目,它正在我的系统上成功运行。这个maven项目接受任何web URL作为输入。现在,每当单击我的chrome扩展时,我都想调用这个Maven项目。我的chrome扩展能够获取网站的URL

那我该怎么做呢?在搜索google和许多其他资源时,我开始意识到我必须创建一个能够监听客户端行为的restful web服务

但我仍然不清楚该怎么做?我连最初的步骤都不清楚

任何想法都会对我大有帮助

我对REST端点/邮递员一无所知,这只是我收集的信息

p.S
如果我描述的场景不清楚,请评论,我会尝试添加更多细节

编辑1

这是我的JS源代码

document.addEventListener('DOMContentLoaded', function () {

      chrome.tabs.query({ currentWindow: true, active: true }, function (tabs) {
      alert(tabs[0].url)
      var req = new XMLHttpRequest();
      req.open("POST", "http://localhost:8080/SalesRESTservice/apicall/restcall2", true);
      req.onload = onResponseReceived;
      var par = 99.99;
      req.send(par);

        function onResponseReceived() {
            alert("It worked.");
        }
      // document.getElementById('Current_url').value = tabs[0].url;
      //console.log(tabs[0].url, tabs[0].title, tabs[0].incognito, tabs, this.bookmark_title);
    });
  });
这是我的JAVA端点代码

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import org.json.JSONException;
import org.json.JSONObject;

@Path("/restcall2")
public class restcall2 {

      @POST
      @Produces("application/json")
      public Response convertFtoC(Double param) throws JSONException {

        JSONObject jsonObject = new JSONObject();
        Double fahrenheit = param;
        Double celsius;
        celsius = (fahrenheit - 32)*5/9; 
        jsonObject.put("F Value", fahrenheit); 
        jsonObject.put("C Value", celsius);

        String result = "@Produces(\"application/json\") Output: \n\nF to C Converter Output: \n\n" + jsonObject;
        return Response.status(200).entity(result).build();
      }

}
我尝试将华氏温度的值发送到java func,但它给出了错误

控制台错误

INFO: Server startup in 1052 ms
May 27, 2016 1:54:17 PM com.sun.jersey.spi.container.ContainerRequest getEntity
SEVERE: A message body reader for Java class java.lang.Double, and Java type class java.lang.Double, and MIME media type application/octet-stream was not found.
The registered message body readers compatible with the MIME media type are:
application/octet-stream ->
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.RenderedImageProvider
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
  com.sun.jersey.core.impl.provider.entity.DocumentProvider
  com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General

May 27, 2016 1:54:19 PM com.sun.jersey.spi.container.ContainerRequest getEntity
SEVERE: A message body reader for Java class java.lang.Double, and Java type class java.lang.Double, and MIME media type application/octet-stream was not found.
The registered message body readers compatible with the MIME media type are:
application/octet-stream ->
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.RenderedImageProvider
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
  com.sun.jersey.core.impl.provider.entity.DocumentProvider
  com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
从 Jersey RESTful Web服务框架是开源的。 你会从那里得到一个简短的想法

此外,您可以在这里获得基本的jersey web应用程序

只需克隆它并运行maven安装

要运行maven项目,请在pom.xml中添加以下插件

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
  </plugin>
从 Jersey RESTful Web服务框架是开源的。 你会从那里得到一个简短的想法

此外,您可以在这里获得基本的jersey web应用程序

只需克隆它并运行maven安装

要运行maven项目,请在pom.xml中添加以下插件

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
  </plugin>

如果您编写了一个REST控制器,它应该启动并侦听传入的请求。您需要提供这些端点作为请求url,并在扩展中获取信息。您可以直接使用浏览器或使用诸如POSTMAN之类的扩展来检查和测试REST端点。您还可以从chrome扩展到REST端点创建一个连接

调用REST API端点的示例JS:

var req = new XMLHttpRequest();
req.open("GET", "http://api.myrestapi.com/services/rest/getEmployee", true);
req.onload = onResponseReceived;
req.send(null);

function onResponseReceived() {
    console.log("It worked.");
}
如果您需要使用POST方法发送参数,请尝试以下操作:

var http = new XMLHttpRequest();
var someValue = "99.99";
var url = "http://localhost:8080/SalesRESTservice/apicall/restcall2/"+param;
var params = JSON.stringify({ param: someValue });
http.open("POST", url, true);

http.setRequestHeader("Content-type", "application/json; charset=utf-8");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");

http.onreadystatechange = function() {
    if(http.readyState == 4 && http.status == 200) {
        alert(http.responseText);
        //or do some callback
    }
}
http.send(params);

如果您编写了一个REST控制器,它应该启动并侦听传入的请求。您需要提供这些端点作为请求url,并在扩展中获取信息。您可以直接使用浏览器或使用诸如POSTMAN之类的扩展来检查和测试REST端点。您还可以从chrome扩展到REST端点创建一个连接

调用REST API端点的示例JS:

var req = new XMLHttpRequest();
req.open("GET", "http://api.myrestapi.com/services/rest/getEmployee", true);
req.onload = onResponseReceived;
req.send(null);

function onResponseReceived() {
    console.log("It worked.");
}
如果您需要使用POST方法发送参数,请尝试以下操作:

var http = new XMLHttpRequest();
var someValue = "99.99";
var url = "http://localhost:8080/SalesRESTservice/apicall/restcall2/"+param;
var params = JSON.stringify({ param: someValue });
http.open("POST", url, true);

http.setRequestHeader("Content-type", "application/json; charset=utf-8");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");

http.onreadystatechange = function() {
    if(http.readyState == 4 && http.status == 200) {
        alert(http.responseText);
        //or do some callback
    }
}
http.send(params);


你是想用postman或其他chrome工具测试REST端点吗?@Bilbobagkins:我对REST端点一无所知,这只是我收集的信息。我想动机很清楚,你能指导我如何实现吗?我不清楚,希望你能从下面给出的答案中找到答案,如果你没有,那么你需要进一步澄清你的动机;)你是想用postman或其他chrome工具测试REST端点吗?@Bilbobagkins:我对REST端点一无所知,这只是我收集的信息。我想动机很清楚,你能指导我如何实现吗?我不清楚,希望你能从下面给出的答案中找到答案,如果你没有,那么你需要进一步澄清你的动机;)你的意思是提供的github repo可以在任何时候将URL作为输入,我会点击chrome扩展?不,对不起,我把你的问题搞错了。我正在为创建restful web应用程序提供输入。看起来你已经有了。我不确定你是否在找这个。但您需要将应用程序运行到某个服务器上,并从chrome extension postman点击其端点url。是的,你能告诉我如何在某个服务器上运行我的maven项目,以及如何从chrome扩展中访问端点URL吗?postmanI一直遵循这一点,就运行应用程序而言,我可以看到这个类中有一个主方法(不是客户端)MinimalServerRest,你可以直接运行这个方法。你是说提供的github repo可以在任何时候将URL作为输入,我会点击chrome扩展?不,对不起,我把你的问题搞错了。我正在为创建restful web应用程序提供输入。看起来你已经有了。我不确定你是否在找这个。但您需要将应用程序运行到某个服务器上,并从chrome extension postman点击其端点url。是的,你能告诉我如何在某个服务器上运行我的maven项目,以及如何从chrome扩展中访问端点URL吗?postmanI一直遵循这一点,就运行应用程序而言,我可以看到这个类中有一个主方法(不是客户端)MinimalServerRest,您可以直接运行此方法。非常感谢您编写REST控制器,我已经尝试过了,服务器在端口上运行,但出现错误“HTTP错误:500访问问题/hello。原因:服务器错误”这是使用jetty server编写REST控制器的正确方法吗?不。您应该清楚了解REST及其工作原理。在您在注释中链接的教程中,每个端点都是用
@Path
定义的。首先,您需要了解这一点,或者如果您使用的是spring,请在您在chrome扩展中实现任何代码之前阅读并测试API。这里有一个例子,如果你想尝试在似乎非常有用的链接为新手像我一样。一定会通过的。Thanks@Lucky:我按照教程操作并成功制作了REST控制器,正如u所说,在调用REST API端点的示例JS中,我无法将参数发送到我的JAVA REST控制器Hanks非常感谢,但为了编写REST控制器,我尝试了这一点,服务器正在端口上运行,但出现错误“HTTP错误:访问/hello时出现500个问题。原因:服务器错误“这是使用jetty服务器编写REST控制器的正确方法吗?不是。您应该清除