有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

作语法分析Java中的com REST API(非Android)

我正在尝试使用解析。Java中的com REST API。我已经阅读了这里给出的4个解决方案https://parse.com/docs/api_libraries,并选择了Parse4J。在将源代码导入Netbeans之后,再导入以下库(Netbeans告诉我需要这些库):

org.slf4j:slf4j-api:jar:1.6.1
org.apache.httpcomponents:httpclient:jar:4.3.2
org.apache.httpcomponents:httpcore:jar:4.3.1
org.json:json:jar:20131018
commons-codec:commons-codec:jar:1.9
junit:junit:jar:4.11
ch.qos.logback:logback-classic:jar:0.9.28
ch.qos.logback:logback-core:jar:0.9.28

我从https://github.com/thiagolocatelli/parse4j运行了示例代码

Parse.initialize(APP_ID, APP_REST_API_ID); // I replaced these with mine

ParseObject gameScore = new ParseObject("GameScore");
gameScore.put("score", 1337);
gameScore.put("playerName", "Sean Plott");
gameScore.put("cheatMode", false);
gameScore.save();

我知道它不见了。阿帕奇。平民日志记录,所以我下载并导入了它。然后我再次运行了代码,得到了

Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug(SLF4JLocationAwareLog.java:120)
at org.apache.http.client.protocol.RequestAddCookies.process(RequestAddCookies.java:122)
at org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:131)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:193)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
at org.parse4j.command.ParseCommand.perform(ParseCommand.java:44)
at org.parse4j.ParseObject.save(ParseObject.java:450)

我可能会用另一个导入来修复这个问题,但我想,然后会出现其他东西。我尝试了其他具有类似结果的库,遗漏了一堆库。有没有人真正使用过解析。com REST API在Java中是否成功?如果是这样的话,如果您能分享您使用的库以及成功运行所需的任何其他信息,我将不胜感激

请不要建议任何你没有尝试过的东西。这可能会让我再次陷入困境

我正在使用Netbeans

谢谢


共 (1) 个答案

  1. # 1 楼答案

    您可能会混淆解析文档。你的标题是“RESTAPI”。然而,你的代码来自解析ANDROID SDK

    1. 弄清楚你将在解析时使用什么界面,然后使用它(ANDROID或REST)

    2. 不要将Android代码混入Java/HTTP/REST客户端进行解析。com

    3. 练习REST API手册中的一些curl CLI示例,您将知道要提交解析的本机命令行http/curl表达式的顺序(将它们放入shell脚本中)

    4. 了解如何在java中实现本机httpclient。我想建议一些async callbacks

    5. 传输解析时的Curl命令行调用序列。com应用到java进程中,您将得到相同的结果

    6. 为了在这种环境中开发,您必须能够使用http记录WIRE/Header

    来自android的示例代码uu经过快速修改,在纯java上几乎兼容:

    //runnable inside the httpclient's implementation of 'exec'
        public void run() {
            int httprc = 999;
            CloseableHttpClient httpClient = HttpClients.custom()
                    .setConnectionManager(YourConnectionMgr.getInstance())
                    .addInterceptorLast(new HttpRequestInterceptor() {
                        public void process(
                                final HttpRequest request, 
                                final HttpContext context) throws HttpException, IOException { 
    
                                if(request.getRequestLine().getMethod() == "GET"){                                                                                                  
                                        request.addHeader("X-Parse-Application-Id", ParseApplication.key_appId);
                                        request.addHeader("X-Parse-REST-API-Key", ParseApplication.key_rest);
                                        request.addHeader("X-Parse-Session-Token",prefs.getString("default_parse_user_token", ""));
                                    }
    
                        }
                    })
                    .build();   
    
            try {                       
                HttpResponse response = null;
                switch (method) {
                case GET:
                    HttpGet httpGet = new HttpGet(url);
                    httpGet.setProtocolVersion(new ProtocolVersion("HTTP", 1,1));
                    httpGet.setConfig(this.config);
                    response = httpClient.execute(httpGet, context);
                    break; }
    
    
            } catch (Exception e) {
                handler.sendMessage(Message.obtain(handler,
                        HttpConnection.DID_ERROR, e));
            }