【问题标题】:Proper way to use restTemplate.getForObject to deserialize JSON object in Android在Android中使用restTemplate.getForObject反序列化JSON对象的正确方法
【发布时间】:2019-10-20 14:16:48
【问题描述】:

我正在尝试将 JSON 对象从 Java 反序列化回 android 类。如果我使用 getForObject(url,String.class) 该方法返回一个值,但是如果我使用 getForObject(url,Info.class) 反序列化为一个对象,调试器会崩溃并且甚至不会到达 catch 块。我错过了什么吗?

 private class HttpRequestTask extends AsyncTask<Void, Void, Info> {
        @Override
        protected Info doInBackground(Void... params) {
            try {

                String url = "http://192.168.1.101:8080/sandbox/android";
                RestTemplate restTemplate = new RestTemplate();
                restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

                // works
                ///String result = restTemplate.getForObject(url, String.class);
                //Log.d("Main",result); // {"id":"1","content":null,"name":"Tommy","number":"6666","email":"abd@zyxo.com"}

                // Info crashes
                Info info2 = restTemplate.getForObject(url, Info.class);
                Log.d("Main","succes");

            } catch (Exception e) {
                Log.e("MainActivity", e.getMessage(), e);
            }

            return null;
        }

【问题讨论】:

  • 崩溃时出现什么错误?

标签: java android json


【解决方案1】:

找到了! Caused by: java.lang.NoClassDefFoundError: java.nio.file.Path。看来我得再配置一下我的 gradle 了

来自 (NoClassDefFoundError on Android) 您正在尝试使用 java.nio.file.Paths,据我所知,它在 Android 中不存在。 (仅支持 Java 7 API 的某些部分。)

现在我很困惑:S

使用

implementation 'org.springframework.android:spring-android-rest-template:2.0.0.M3'
implementation 'org.springframework.android:spring-android-core:2.0.0.M3'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.0.pr3'

[edit]发现它是 Jackson 问题 https://github.com/FasterXML/jackson-databind/issues/2466 [/edit]

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多