質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

9071閲覧

jacksonを使用したTimestampのJSONへの変換

pepeko

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

2クリップ

投稿2018/04/27 01:25

Timestampのフィールドが定義されているDTOクラスを
org.codehaus.jackson.map.ObjectMapperを使用してDTO→JSONへ変換しているのですが
Timestampの値が"yyyy-MM-dd"のような値ではなく数値となってしまいます。

Timestampの値を指定した形式(日付)に変換して出力したいと考えています。

/** 更新日時 */ @JsonFormat(pattern="yyyy-MM-dd") private Timestamp updatedAt;

上記のような指定をしても効果がないようです。

/** * DTOクラスをJSON文字列に変換 * @param dto * @return */ public static String objectToJson(Object dto) { ObjectMapper mapper = new ObjectMapper(); String json; try { json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(dto); } catch (JsonGenerationException e) { return null; } catch (JsonMappingException e) { return null; } catch (IOException e) { return null; } return json; }

上記が変換をおこっているメソッドです。

以上です。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/04/27 01:28

どのような値がどのように変換されるのでしょうか?例えば今日の日付(2018-04-27)だとどうなりますか?
pepeko

2018/04/27 01:44 編集

上記のupdatedAtにnew Timestamp(new Date().getTime())を設定し DTO->JSONへの変換を行うと "updatedAt" : 1524793348359 といった値となります。
退会済みユーザー

退会済みユーザー

2018/04/27 02:33

「@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")」ではどうでしょう?
pepeko

2018/04/27 02:39

ご回答ありがとうございます。結果は変わらずでした。
退会済みユーザー

退会済みユーザー

2018/04/27 05:00

私の環境ではうまく動きました。(jackson-annotations-2.9.5.jar jackson-core-2.9.5.jar jackson-databind-2.9.5.jar)
guest

回答1

0

ベストアンサー

試してみましたがうまくいくようです。

[pom.xml]

xml

1<project xmlns="http://maven.apache.org/POM/4.0.0" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <groupId>com.sample</groupId> 6 <artifactId>ObjectMapper</artifactId> 7 <version>0.0.1-SNAPSHOT</version> 8 <dependencies> 9 <dependency> 10 <groupId>com.fasterxml.jackson.core</groupId> 11 <artifactId>jackson-databind</artifactId> 12 <version>2.9.5</version> 13 </dependency> 14 </dependencies> 15</project>

[Main.java]

java

1import java.sql.Timestamp; 2import java.util.Date; 3 4import com.fasterxml.jackson.annotation.JsonFormat; 5import com.fasterxml.jackson.core.JsonProcessingException; 6import com.fasterxml.jackson.databind.ObjectMapper; 7 8public class Main { 9 @JsonFormat(pattern="yyyy-MM-dd") 10 private Timestamp updatedAt = new Timestamp(new Date().getTime()); 11 12 public static void main(String[] args) throws JsonProcessingException { 13 String json = new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(new Main()); 14 System.out.println(json); 15 } 16}

[実行結果]

{ "updatedAt" : "2018-05-01" }

投稿2018/05/01 10:14

nakazawaken1

総合スコア94

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepeko

2018/05/07 01:39

私も同じバージョンで試してみましたが、変わらずでした・・・ springBootの環境で作成しているのですが Dtoを直接リターンしたら、クライアント側でjson形式に変換してくれました。 一旦解決としたいです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問