小编cat*_*h22的帖子

基于Enum的Jackson多态反序列化

我正在使用JacksonPolymorphicDeserialization,这是我的代码,它反序列化为基于'type'属性的正确类:

@JsonTypeInfo(  
    use = JsonTypeInfo.Id.NAME,  
    include = JsonTypeInfo.As.PROPERTY,  
    property = "type",
    defaultImpl = Event.class, 
    visible = true)  
@JsonSubTypes({        
    @Type(value = SpecialEvent1.class, name = "SPECIAL_EVENT_1"), 
    @Type(value = SpecialEvent2.class, name = "SPECIAL_EVENT_2"), 
    })  
public abstract class AbstractEvent {

    private String type;

    public String getType() {
    return type;
    }

    public void setType(String type) {
    this.type = type;
    }   
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,我的json根据'type'值变成了预期的类.

但是,我正在考虑将'type'属性从String移动到Enum,这是我的新代码:

@JsonTypeInfo(  
    use = JsonTypeInfo.Id.NAME,  
    include = JsonTypeInfo.As.PROPERTY,  
    property = "type",
    defaultImpl = Event.class, 
    visible = true)  
@JsonSubTypes({        
    @Type(value = SpecialEvent1.class, …
Run Code Online (Sandbox Code Playgroud)

java polymorphism json jackson

23
推荐指数
2
解决办法
9126
查看次数

java 15 纳秒精度导致 Linux 环境出现问题

我有一个关于映射Instant到 PostgreSQL 的最佳实践问题TIMESTAMP

我们已将应用程序更新到 Java 15,系统时钟的新增强功能为纳秒精度 ( https://bugs.openjdk.java.net/browse/JDK-8242504 ) 与 Postgres 中的 TIMESTAMP 限制不兼容。时间根据底层操作系统的不同而不同,Mac (Big Sur) 中的 Instant 不提供以纳秒为单位的时间,但 Linux 中提供。

我们在代码库中使用即时类型。我们的测试正在比较内存中的 Instant 类型的对象与获取的对象,因此它们会失败,具体取决于它们运行的​​操作系统。

在Linux中,内存中的Instant对象的精度为纳秒,而Postgres存储的Instant(TIMESTAMP)的精度为微秒。断言失败:

java.lang.AssertionError: expected [2021-01-04T19:32:23.726475249Z] but found [2021-01-04T19:32:23.726475Z]
Run Code Online (Sandbox Code Playgroud)

在 Mac 中,Instant 对象的精度为微秒,与 Postgres 的时间戳精度充分一致,因此测试会像迄今为止所做的那样通过。

我们希望避免截断 Instant 或向 PG 添加插件来支持纳秒。

其他人如何以稳健、全面的方式处理这个问题?

java postgresql java-time java-15

15
推荐指数
0
解决办法
2260
查看次数

如何在Ruby中创建JSON对象

我正在用Ruby创建一个JSON文件.我需要在JSON文件中创建对象"companies".

预期结果:

{"companies":[
    {\"label\":\"Wayfair \",\"values\":[54]},
    {\"label\":\"Move24 \",\"values\":[29]},
    {\"label\":\"Auto1 \",\"values\":[23]},
...
]}
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

[  
   "{\"label\":\"Wayfair \",\"values\":[54,54]}",
   "{\"label\":\"Move24 \",\"values\":[29,29]}",
   "{\"label\":\"GetYourGuide \",\"values\":[28,28]}",
   "{\"label\":\"Auto1.com \",\"values\":[20,20]}", ...
]
Run Code Online (Sandbox Code Playgroud)

我的代码:

data_hash = data_hash.map {|k,v| {label: k, values: v}}

companies_json = []

data_hash.each do |hash|
  companies_json << hash.to_json
end

File.open('companies.json', 'w') do |f|
  f << companies_json
end
Run Code Online (Sandbox Code Playgroud)

ruby parsing json

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

无法在rails控制台中创建对象 - 模型关联

我是RoR的新手,我正在练习模特和协会.

我用belongs_to关联创建了两个模型.当我尝试通过Rails控制台创建其中一个模型的对象时,我得到一个回滚事务,我不知道为什么.所有帮助将不胜感激!

我已成功创建用户:

=> #<User id: 1, name: "Jen", created_at: "2016-12-04 17:48:33", updated_at: "2016-12-04 17:48:33"> 
Run Code Online (Sandbox Code Playgroud)

当我尝试创建一个Post对象时,我得到了这个:

2.3.0 :012 > post = Post.create(body: "hola soy un post nuevo")
   (0.2ms)  begin transaction
   (0.1ms)  rollback transaction
 => #<Post id: nil, user_id: nil, body: "hola soy un post nuevo", created_at: nil, updated_at: nil> 
Run Code Online (Sandbox Code Playgroud)

models/user.rb>

class User < ApplicationRecord
  has_many :posts
end
Run Code Online (Sandbox Code Playgroud)

models/post.rb>

class Post < ApplicationRecord
  belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

db/schema.rb>

ActiveRecord::Schema.define(version: 20161204174201) do

  create_table "posts", force: :cascade do |t|
    t.integer  "user_id"
    t.text     "body"
    t.datetime …
Run Code Online (Sandbox Code Playgroud)

model-view-controller activerecord ruby-on-rails associations models

1
推荐指数
1
解决办法
1715
查看次数