ISO-8601(yyyy-MM-dd’T’HH:mm:ss.SSSXXX) format in micronaut HttpResponse not working.
We need date in yyyy-MM-dd’T’HH:mm:ss.SSSXXX format, however deserialize not converting in required format.
Controller
import com.fasterxml.jackson.core.JsonProcessingException;
import io.micronaut.http.*;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.scheduling.TaskExecutors;
import io.micronaut.scheduling.annotation.ExecuteOn;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Mono;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@AllArgsConstructor
@Controller
@Slf4j
@ExecuteOn(TaskExecutors.BLOCKING)
public class LogisticsController1 {
@Get("/test")
public Mono<HttpResponse<Object>> getRes() throws ParseException, JsonProcessingException {
String d="2024-05-01T19:52:33.411Z";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Date date2=simpleDateFormat.parse(d);
TestDate date11=new TestDate();
date11.setDate(date2);
return Mono.just(buildResponse(date11));
}
public HttpResponse<Object> buildResponse(TestDate date11) throws JsonProcessingException {
return HttpResponse.status(HttpStatus.OK).body(date11);
}
}
DTO:
import io.micronaut.serde.annotation.Serdeable;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Date;
@Setter
@Getter
@NoArgsConstructor
@Serdeable
public class TestDate {
//@JsonFormat( shape = STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
Date date;
}
API Response :
Actual :
{ “date”: “2024-05-01T19:52:33.411Z” }
Expected
{ “date”: “2024-05-02T01:22:33.411+05:30” }
==================================
Things tried:
Looks like JsonFormat does not ISO-8601, other formats are working.
@JsonFormat( shape = STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
Date date;