2017-12-19 8 views
1

iがトピック・クラスタイプのデータメンバーdurationを有していてLocalTimeレジスタモジュールは、グローバル

@Entity 
    @Table(name= "topics") 
    @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, 
    property = "id", 
    scope  = Long.class) 
    @DynamicInsert(true) 
    @DynamicUpdate(true) 
    public class Topics implements Serializable { 

     private static final long serialVersionUID = -1777454701749518940L; 

     @Id 
     @Column(name= "id") 
     private Long id = Long.parseLong(UUID.randomUUID().toString().substring(0, 8), 16); 

     @NotEmpty 
     @NotNull 
     @Column(name= "topic", columnDefinition = "Text", length = 50000) 
     private String topic; 

     @Convert(converter = LocalTimeConverter.class) 
     private LocalTime duration; 

     // getters and setters 
    } 

入力JSON:

{ 
    "topic":"x111", 
    "imageUrl":"http://x.com/x1/x11/x111", 
    "duration":"00:00:05" 
} 

エラー:

Can not construct instance of java.time.LocalTime: no String-argument constructor/factory method to deserialize from String value ('00:00:05') 

溶液:

POM.XML 
<dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>com.fasterxml.jackson</groupId> 
       <artifactId>jackson-bom</artifactId> 
       <version>2.9.0</version> 
       <scope>import</scope> 
       <type>pom</type> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <dependency> 
     <groupId>com.fasterxml.jackson.module</groupId> 
     <artifactId>jackson-module-parameter-names</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.datatype</groupId> 
     <artifactId>jackson-datatype-jdk8</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.datatype</groupId> 
     <artifactId>jackson-datatype-jsr310</artifactId> 
    </dependency> 

ObjectMapper mapper = new ObjectMapper(); 
mapper.findAndRegisterModules(); 

or 

mapper.registerModule(new ParameterNamesModule()) 
     .registerModule(new Jdk8Module()) 
     .registerModule(new JavaTimeModule()); 

それが正常に機能していますが、どのように私は、グローバルモジュールを登録することができます。

iをWebConfigurationAdapter

@Override 
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
     final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); 
     final ObjectMapper objectMapper = new ObjectMapper(); 
     objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 
     objectMapper.registerModule(new ParameterNamesModule()) 
        .registerModule(new Jdk8Module()) 
        .registerModule(new JavaTimeModule()); 

     //objectMapper.findAndRegisterModules(); 

     converter.setObjectMapper(objectMapper); 
     converters.add(converter); 
     super.configureMessageConverters(converters); 
    } 

を拡張するが、それは

答えて

2

を働いていなかっただけ

あなたのメインスプリングブーツApplicationクラスで行う必要があります
@Autowired 
    void configureObjectMapper(final ObjectMapper mapper) { 
    mapper.registerModule(new ParameterNamesModule()) 
    .registerModule(new Jdk8Module()) 
    .registerModule(new JavaTimeModule()); 
    } 

をコードのこの部分を入れてみましたトリック。
@Beanで関数を作成することもできます。
newを使用してObjectMapperを作成する代わりに、必要なクラスにObjectMapperをオートワイヤーします。

+0

ありがとう@pvpkiranその作業.. –