【问题标题】:Error in mapper.writeValue() methodmapper.writeValue() 方法中的错误
【发布时间】:2014-07-22 14:24:04
【问题描述】:

我正在开发一个 Java 应用程序作为 Google Cloud Messaging Android 应用程序中的服务器。 我一直在关注tutorial,并且顺利完成了本教程的其余部分。

我的 Java 应用程序具有三个类,即 Content.java、POST2GCM.java、App.java。这些类执行名称所描述的操作。

Content.java 类在下面。

package com.hmkcode.vo;

import java.io.Serializable;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class Content implements Serializable {

    private List<String> registration_ids;
    private Map<String,String> data;

    public void addRegId(String regId){
        if(registration_ids == null)
            registration_ids = new LinkedList<String>();
        registration_ids.add(regId);
    }

    public void createData(String title, String message){
        if(data == null)
            data = new HashMap<String,String>();

        data.put("title", title);
        data.put("message", message);
    }
}

App.java 类在下面

package com.hmkcode.vo;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.hmkcode.vo.Content;

public class App
{
    public static void main( String[] args )
    {
        System.out.println( "Sending POST to GCM" );

        String apiKey = "AIzaSyB8azikXJKi_NjpWcVNJVO0d........";
        Content content = createContent();

        POST2GCM.post(apiKey, content);
    }

    public static Content createContent(){

        Content c = new Content();

        c.addRegId("APA91bFqnQzp0z5IpXWdth1lagGQZw1PTbdBAD13c-UQ0T76BBYVsFrY96MA4SFduBW9RzDguLaad-7l4QWluQcP6zSoX1HSUaAzQYSmI93....");
        c.createData("Test Title", "Test Message");

        return c;
    }
}

POST2GCM.java 类如下

package com.hmkcode.vo;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import com.fasterxml.jackson.databind.*;
public class POST2GCM {

    public static void post(String apiKey, Content content){

        try{

        // 1. URL
        URL url = new URL("https://android.googleapis.com/gcm/send");

        // 2. Open connection
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        // 3. Specify POST method
        conn.setRequestMethod("POST");

        // 4. Set the headers
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Authorization", "key="+apiKey);

        conn.setDoOutput(true);

            // 5. Add JSON data into POST request body

            //`5.1 Use Jackson object mapper to convert Content object into JSON
            ObjectMapper mapper = new ObjectMapper();

            // 5.2 Get connection output stream
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());

            // 5.3 Copy Content "JSON" into

            mapper.writeValue(wr,content);

            // 5.4 Send the request
            wr.flush();

            // 5.5 close
            wr.close();

            // 6. Get the response
            int responseCode = conn.getResponseCode();
            System.out.println("\nSending 'POST' request to URL : " + url);
            System.out.println("Response Code : " + responseCode);

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            // 7. Print result
            System.out.println(response.toString());

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
}

问题出现在 POST2GCM.java 类中,在行中

mapper.writeValue(wr,content);

建议添加 try catch 块、向方法签名添加异常、添加 catch 子句。 我做了所有没有解决问题的建议。

这里有什么问题?

【问题讨论】:

  • 它没有指定错误,因为我没有编译代码。有一条红线表示有错误。建议就是我上面评论的内容。
  • 我没有编译,因为我知道已经有错误了
  • 当我添加 try and catch 块时。我明白了。
  • 尝试 { mapper.writeValue(wr,content); } catch (JsonMappingException e) { e.printStackTrace();这在“(JsconMappingException e)”行中给出了一个错误。它说不兼容的类型。必需:Java.lang.Throwable。发现:com.fasterxml.jackson.databind.JsonMappingException。希望这有助于澄清问题
  • 有人有解决办法吗?

标签: java android json jackson google-cloud-messaging


【解决方案1】:

您需要将jackson-core-2.4.3.jar 库文件添加到您的项目中。 也将其添加到您的 java 构建路径中。

当然... 2.4.3 是我使用的版本,但它应该可以与以前的版本一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多