DropwizardのTips

LocalDateのJSON値がISO8601になっていない

そのままだと

{"created": [2017,10,1]}

みたいな値になる。

エンティティに@JsonFormat(pattern = "yyyy-MM-dd")を追加してISO8601にする。

    @NotNull
    @JsonProperty
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate created;

修正後はこうなります。
{"created": "2017-10-01"}

@QueryParamにLocalDateが使えない

起動時にエラーとなりました。

対応策としてはOptional<LocalDateParam>を使う。

日本語の文字化け

@Producescharset=utf-8を指定する。

@Path("/user")
@Api("/user")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public class UserResource {

database側の設定はapplication.ymlにcharSet: UTF-8を指定する。

database:
  properties:
    charSet: UTF-8

例外ハンドリング

ExceptionMapperをimplementsしたRuntimeExceptionMapperを実装。
例外時の処理をここに集約できます。

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class RuntimeExceptionMapper implements ExceptionMapper<ApplicationException> {

    @Override
    public Response toResponse(ApplicationException exception) {
        return Response
                .status(exception.getError().getStatus())
                .entity(exception.toJson())
                .type(MediaType.APPLICATION_JSON_TYPE + ";charset=utf-8")
                .build();
    }
}

ApplicationExceptionは独自実装したものですが、エラーの内容がわかるものであればなんでも良いと思います。

{
  "status": 404,
  "message": "指定したリソースはみつかりませんでした。"
}

Swaggerのその他設定

Titleなど追加できます。

swagger:
  resourcePackage: demo.resources
  title: アスニピースブログ
  version: 0.1
  description: Webサイト構築、エンジニアリングサービスはアスニピースにご相談ください
  contact: contact@asnpce.com
  license: license
  licenseUrl: http://xxxxx

今後

ひとまず一通りDropwizardに関して記事をあげてまいりました。
いったんこれでラストかなと思います。

また何か発見や問題などがあれば発信していきます!どうぞよろしくお願いします。

サーバサイドエンジニア。オムライスが好物

シェアする

  • このエントリーをはてなブックマークに追加

フォローする