micronaut HttpResponse 中的 ISO-8601(yyyy-MM-dd'T'HH:mm:ss.SSSXXX) 格式不起作用

问题描述 投票:0回答:1

micronaut HttpResponse 中的 ISO-8601(yyyy-MM-dd'T'HH:mm:ss.SSSXXX) 格式不起作用。

我们需要 yyyy-MM-dd'T'HH:mm:ss.SSSXXX 格式的日期,但是反序列化未按所需格式转换。

控制器

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 响应:
实际:

{“日期”:“2024-05-01T19:52:33.411Z”}

预计

{ “日期”: “2024-05-02T01:22:33.411+05:30” }

======================================

尝试过的事情:

看起来 JsonFormat 不支持 ISO-8601,其他格式也可以工作。

@JsonFormat( shape = STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
Date  date;
java jackson micronaut micronaut-rest
1个回答
0
投票

如果要以 ISO 格式显示时区偏移量,还需要在

timezone
注释中指定
@JsonFormat
属性。在您的情况下,由于 +5:30 对应于印度,如果您希望日期序列化为
{ "date": "2024-05-02T01:22:33.411+05:30" }
,您可能需要按以下方式编写注释:

@ToString
public class TestDate {
    @JsonFormat(shape = STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "Asia/Kolkata")
    Date date;
}
© www.soinside.com 2019 - 2024. All rights reserved.