相关疑难解决方法(0)

无法从VALUE_STRING中反序列化java.util.ArrayList的实例

我有一个使用Jersey构建的REST服务,并部署在AppEngine中.REST服务实现使用application/json媒体类型的动词PUT.数据绑定由Jackson执行.

动词使用JSON表示的企业部门关系

{"name":"myEnterprise", "departments":["HR","IT","SC"]}
Run Code Online (Sandbox Code Playgroud)

在客户端,我使用gson将JSON表示转换为java对象.然后,我将对象传递给我的REST服务,它工作正常.

问题:

当我的JSON表示在集合中只有一个项目时

{"name":"myEnterprise", "departments":["HR"]}
Run Code Online (Sandbox Code Playgroud)

该服务无法反序列化该对象.

ATTENTION: /enterprise/enterprise: org.codehaus.jackson.map.JsonMappingException: 
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token at 
[Source: org.mortbay.jetty.HttpParser$Input@5a9c5842; line: 1, column: 2
Run Code Online (Sandbox Code Playgroud)

正如其他用户所报告的那样,解决方案是添加标志ACCEPT_SINGLE_VALUE_AS_ARRAY(例如,Jersey:无法从String中反序列化ArrayList的实例).然而,我并不是在控制ObjectMapper,因为在服务方面它是由Jackson透明地制作的.

题:

有没有办法在服务端配置ObjectMapper以启用ACCEPT_SINGLE_VALUE_AS_ARRAY?注释?web.xml中?

代码细节

Java对象:

@XmlRootElement
public class Enterprise {
    private String name;
    private List<String> departments;

    public Enterprise() {}

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<String> getDepartments() {
        return departments;
    }
    public void setDepartments(List<String> departments) {
        this.departments …
Run Code Online (Sandbox Code Playgroud)

java json arraylist jackson json-deserialization

52
推荐指数
5
解决办法
15万
查看次数

在Firebase中制作POJO时,可以使用ServerValue.TIMESTAMP吗?

当您创建一个简单的旧Java对象,该对象旨在从Firebase序列化和反序列化时,有没有办法使用该ServerValue.TIMESTAMP值?

例如,假设我想要一个对象,其中一个属性是最后一次编辑,并且您想要使用该ServerValue.TIMESTAMP值.

在POJO类中,您可能具有:

private String timeLastChanged;
Run Code Online (Sandbox Code Playgroud)

要么

private Map<String, String> timeLastChanged;
Run Code Online (Sandbox Code Playgroud)

在第一个例子中String,我遇到了设置问题timeLastChange = ServerValue.TIMESTAMP;,因为ServerValue.TIMESTAMP是Map.

在第二个例子中,Map<String, String>我得到了一个"未能去抖"的错误,因为它无法正确地将数据库中存储的long反序列化为一个Map<String, String>.这有什么工作吗?

android firebase firebase-realtime-database

23
推荐指数
4
解决办法
1万
查看次数

如何使用Firebase服务器时间戳生成日期?

目前,Google的ServerValue.TIMESTAMP退货版本将{".sv":"timestamp"}用作Firebase的指令,以便在将数据保存到Firebase服务器后使用服务器时间戳填充该字段.

但是,当您在客户端创建数据时,您还没有实际的时间戳(即用作创建日期).在初始保存和随后的检索之后,您只能访问时间戳,我想 - 有时候太晚了,不太优雅.


在Google之前:

更新:忽略此部分,因为它不正确 - 我误解了这些例子.ServerValue.TIMESTAMP总是回来的{".sv":"timestamp"}.

据我所知,在google之前的Firebase中,似乎有一个服务器生成的时间戳可用于获取实际时间戳:

import com.firebase.client.ServerValue;
ServerValue.TIMESTAMP // eg. 1466094046
Run Code Online (Sandbox Code Playgroud)

(参考1,参考2)


问题:

  1. 这样的保存/检索是在我的模型实例上获取服务器生成的创建日期的唯一方法吗?
  2. 如果是,你能提出一种实施这种模式的方法吗?
  3. 我是否正确理解ServerValue.TIMESTAMP已经改变了谷歌收购Firebase?更新:不,@ FrankkuPuffelen回复说在收购过程中没有任何改变.

注意:

我不打算new Date()在客户端使用,因为我一直在阅读它并不安全,但如果你认为不同,请分享你的想法.

android timestamp firebase firebase-realtime-database

16
推荐指数
1
解决办法
3万
查看次数

Java数据模型对象中的Firebase ServerValue.TIMESTAMP

我是Firebase的新手,到目前为止我一直非常喜欢它.我遇到了问题; 我正在使用类似于教程大纲的FirebaseListAdapter:https://github.com/firebase/AndroidChat

要使用FirebaseListAdapter,我需要使用数据模型对象(以使自动绑定工作得很好).问题是我还想保留该模型对象的时间戳值,并且我想从Firebase服务器获取时间戳.

我目前没有工作的是一个类DataModelObject(类似于演示示例中的com.firebase.androidchat.Chat),其构造函数如下:

DataModelObject(String data1, String data2, Map enQTimeStamp)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用这样:

DataModelObject dmo = new DataModelObject ("foo", "bar", ServerValue.TIMESTAMP);
myFirebaseRef.push().setValue(dmo);
Run Code Online (Sandbox Code Playgroud)

当我尝试运行该代码时,这会导致JsonMappingException.我在这里找到了一个代码片段:

https://www.firebase.com/blog/2015-02-11-firebase-unique-identifiers.html

但是值得注意的是,在Android代码示例的第4行,这将导致编译时错误(因为他试图将ServerValue.TIMESTAMP放入Map中,而TIMESTAMP是Map本身)

正确的方法是什么,并保持与FirebaseListAdapter的兼容性?

android firebase

9
推荐指数
2
解决办法
2万
查看次数

Java JSON -Jackson-嵌套元素

我的JSON字符串具有嵌套值.

就像是

"[{"listed_count":1720,"status":{"retweet_count":78}}]"

我想要的价值retweet_count.

我正在使用杰克逊.

下面的代码输出" {retweet_count=78}"而不是78.我想知道我是否能以PHP的方式获取嵌套值,即status->retweet_count.谢谢.

import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

public class tests {
public static void main(String [] args) throws IOException{
    ObjectMapper mapper = new ObjectMapper();
  List <Map<String, Object>> fwers = mapper.readValue("[{\"listed_count\":1720,\"status\":{\"retweet_count\":78}}]]", new TypeReference<List <Map<String, Object>>>() {});
    System.out.println(fwers.get(0).get("status"));

    }
}
Run Code Online (Sandbox Code Playgroud)

java json jackson

6
推荐指数
2
解决办法
2万
查看次数

在发送数据时,从Android应用中的Firebase检索ServerValue.Timestamp

我想知道如何使用Firebase的ServerValue.TIMESTAMP方法,当我想在Firebase服务器上创建时间戳,然后将其检索到本地客户端时.

在Firebase指南中,只有javascript对此案例有更详细的描述,但我很难想到如何将其转换为我的Android应用程序.

提前致谢!

java android timestamp chat firebase

5
推荐指数
1
解决办法
2万
查看次数