2016-08-08 19 views
1

Я использую quickxml jackson для сериализации json. Я написал дату сериализатора какОтображения Spring Boot Jackson не работают

public class DateObjectSerializer extends JsonSerializer<Date> { 
    public static final String DATE_FORMAT = "dd.MM.yyyy"; 

    @Override 
    public void serialize(Date date, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { 
     System.out.println("From DateObjectSerializer"); 
     SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); 
     String formattedDate = dateFormat.format(date); 
     jgen.writeString(formattedDate); 
    } 
} 

Но он не вызывается. Однако другие мастерские Джексона работают нормально.

Поэтому я добавил следующую конфигурацию в application.yaml

spring: 
    jackson: 
    serialization-inclusion: non_null 
    date-format: dd.MM.yyyy 

Но din't работу.

Таким образом, я добавил этот код в класс SpringBootConfiguration.

@Override 
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
    final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); 
    final ObjectMapper objectMapper = new ObjectMapper(); 
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); 
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false).setDateFormat(dateFormat); 
    converter.setObjectMapper(objectMapper); 
    converters.add(converter); 
    super.configureMessageConverters(converters); 
} 

Теперь даты сериализуются правильно. Но теперь действующие эквивалентные строки JSON не преобразуются в JSON, как указано here.

@RestController 
public class SampleController { 

    @RequestMapping(value = "/jsonInfo", method = RequestMethod.GET, produces = APPLICATION_JSON_VALUE) 
    public String jsonInfo() { 
     String string = "{\"name\": \"foo\"}" 
       return string; 
    } 
} 
+0

Я думаю, что базовая конфигурация свойство поддерживается от Spring загрузки 1.4.1. Итак, os issue 1 –

+0

Что заставляет вас думать об этом? –

+0

их документация. В 1.4.0 документах они говорят о конфигурации на основе свойств. Но в 1.4.1 документах они говорили о @JsonComponent и конфигурации на основе свойств. –

ответ

1

Попробуйте

import com.fasterxml.jackson.databind.ObjectMapper; 

: 

@Autowired 
private ObjectMapper objectMapper; 

@RestController 
public class SampleController { 

    @RequestMapping(value = "/jsonInfo", method = RequestMethod.GET, produces = APPLICATION_JSON_VALUE) 
    public JsonNode jsonInfo() throws JsonProcessingException, IOException { 
     String string = "{\"name\": \"foo\"}" 
       return objectMapper.readTree(string); 
    } 
} 
+0

Он решил последнюю благодарность. Однако я сделал с Jsonformat. Но это выглядит более чистым. –

Смежные вопросы