Нам нужно настроить глобальную конфигурацию, которая описывает настройку cors-header для запросов.
Я использую SpringBoot, и проект загружается весной в файл расширения * .war.
@SpringBootConfiguration
@EnableScheduling
@SpringBootApplication
public class App
extends SpringBootServletInitializer
implements WebApplicationInitializer {
private static final Logger LOGGER = LoggerFactory.getLogger( App.class );
public static void main(String[] args) {
LOGGER.info("Start an application...");
SpringApplication.run(App.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
LOGGER.info("There is building the web application!");
return builder.sources(App.class);
}
}
Это урегулирование для заголовка cors. Я должен импортировать конфигурацию Spring MVC ( @ EnableWeb Mvc), чтобы настроенная мной конфигурация работала.
@EnableWebMvc
@Configuration
public class CorsGlobalConfiguration {
private final static String ROOT_API = "/**";
@Bean
public WebMvcConfigurer corsConfig(){
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping(ROOT_API)
.allowedHeaders("*")
.allowedOrigins("*")
.allowedMethods("GET","POST","PUT");
}
};
}
}
Но клиент получил json в дате, которая входит в массив.
Например:
Клиент должен получить:
"2020-03-14T11: 32: 33",
Но клиент получает
[2020, 03, 14, 11, 32, 33]
Update_1
Я сделал.
@Configuration
public class JacksonConfig {
@Bean
@Primary
public ObjectMapper configureObjectMapper() {
JavaTimeModule javaTimeModule = new JavaTimeModule();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(javaTimeModule);
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return objectMapper;
}
}
Не работает.
Update_2
Я сделал.
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = false
Не работает.
Update_3
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.10.3</version>
</dependency>
и
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = false
Это также не работает.
Update_4
I выполнил следующие действия:
#spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
@Component
public class JacksonLocalDateSerializer extends StdSerializer<LocalDateTime> {
private static final long serialVersionUID = -7880057299936771237L;
private static final DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSZ")
.withResolverStyle(ResolverStyle.STRICT);
public JacksonLocalDateSerializer(Class<LocalDateTime> t) {
super(t);
}
public JacksonLocalDateSerializer() {
this(null);
}
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeString(formatter.format(value));
}
}
@Configuration
public class JacksonConfig {
private JacksonLocalDateSerializer jacksonLocalDateSerializer;
@Autowired
public JacksonConfig(JacksonLocalDateSerializer jacksonLocalDateSerializer) {
this.jacksonLocalDateSerializer = jacksonLocalDateSerializer;
}
@Bean
@Primary
public ObjectMapper configureObjectMapper() {
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, this.jacksonLocalDateSerializer);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(javaTimeModule);
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return objectMapper;
}
}
...
private LocalDateTime statusDate;
...
Я получаю:
Почему это так?
Хо w сделать это правильно?
У кого есть идеи?