小编Gle*_*zza的帖子

有效的方法让杰克逊将Java 8 Instant序列化为纪元毫秒?

使用带有Jackson JSON解析后端的Spring RestControllers,前端使用AngularJS.我正在寻找一种有效的方法让Jackson序列化一个Instant作为纪元毫秒,以便随后使用JavaScript代码.(在浏览器方面,我希望通过Angular的日期过滤器提供epoch ms :{{myInstantVal | date:'short' }}为我所需的日期格式.)

在Java方面,杰克逊将使用的吸气剂就是:

public Instant getMyInstantVal() { return myInstantVal; }
Run Code Online (Sandbox Code Playgroud)

序列化不会按原样运行,因为对于Instant ,jackson-datatype-jsr310默认不返回Epoch毫秒.我看着将@JsonFormat添加到上面的getter中以将Instant变形为前端可以使用的东西,但它遇到两个问题:(1)我可以提供它的模式显然仅限于SimpleDateFormat,它不提供"epoch milliseconds"选项,以及(2)当我尝试将Instant作为格式化日期发送到浏览器时,Jackson会抛出异常,因为@JsonFormat注释需要Instants的TimeZone属性,我不想硬编码因为它会因用户而异.

到目前为止我的解决方案(并且工作正常)是使用@JsonGetter创建替换的getter ,这会导致Jackson使用此方法来序列化myInstantVal:

@JsonGetter("myInstantVal")
public long getMyInstantValEpoch() {
    return myInstantVal.toEpochMilli();
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?或者是否有一个很好的注释,我错过了我可以放在getMyInstantVal()所以我不必创建这些额外的方法?

spring json jackson angularjs java-time

8
推荐指数
2
解决办法
5350
查看次数

使用for/yield从序列中删除元素

给定一个Future[Seq[Widget]],Widget包含一个amount : Int属性,我想返回一个Seq[Widget]但仅限于那些Widget数量值大于100的s.我相信该for { if … } yield { }构造将给我我想要的但不确定如何过滤序列.我有:

val myWidgetFuture :  Future[Seq[Widget]] = ...

for {
  widgetSeq <- myWidgetFuture
  if (??? amount > 100) <— what to put here?
}  yield {
  widgetSeq
}
Run Code Online (Sandbox Code Playgroud)

如果有一种干净的非收益方式,这对我也有用.

scala

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

标签 统计

angularjs ×1

jackson ×1

java-time ×1

json ×1

scala ×1

spring ×1