2017-05-26 12 views
3

Springブートアプリケーションでは、Java 8タイプLocalDateを含むペイロードを取るレストコントローラがあります。また、私はこのライブラリが接続している :生産コールでSpringの@WebMvcTestはJava 8タイプでは動作しません

Resolved Exception: 
      Type = org.springframework.http.converter.HttpMessageNotReadableException 

日:呼び出されたときに

<dependency> 
    <groupId>com.fasterxml.jackson.datatype</groupId> 
    <artifactId>jackson-datatype-jsr310</artifactId> 
</dependency> 

コントローラが正常に動作しますがしかし@WebMvcTest統合テストは、400 HTTPコードと、この例外を除いてそのフィールドに失敗しましたテストコールは次のように渡されます。

"date":"2017-03-21" 

@WebMvcTestはJava8タイプで動作させる方法はありますか?

@Bean 
@Primary 
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { 
    return builder.modules(new JavaTimeModule()).build(); 
} 

問題を解決:ユージーンのヒント触発

答えて

1

はテスト構成に次のBean構成を追加しました。

EDIT:シンプルな設定(クラスパスに春ブーツ+ジャクソン・データ型-jsr310ライブラリー)と 作品罰金:

@Bean 
@Primary 
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { 
    return builder.build() 
} 
2

次の例のように、MockMvcBuildersであなたが持っているものは何でもコンバータ登録する必要があります:

MockMvcBuilders 
     .standaloneSetup(controller) 
     .setMessageConverters(converter) // register.. 
     .build(); 

それとも単純には(私はこのようにそれを行う)既に設定ObjectMapper(で返す@Beanを持っています210)、それを返します。この@Configurationは、あなたのテスト内で使用する必要があります。あなたが直接/フォーマットは、あなたのRestControllerMethodバックLOCALDATEに解析される文字列にあなたのLOCALDATEを解析することができますjava.time.LocalDateについては

+1

JSR310Moduleは、()は推奨されません、一つはJavaTimeModuleを使用する必要があります() –

0

@RestController 
@RequestMapping("/api/datecontroller/") 
public class YourDateController{ 

@GetMapping(value = "myDateMethod/" + "date") 
public void yourDateMethod(@PathVariable("date") @DateTimeFormat(pattern="yyyy-MM-dd") final LocalDate date) { 
// ... your code ... 
    } 
} 
関連する問題