2

我从用包含日期时间类型的 spring 云函数编写的天蓝色函数输出 POJO。我已经在它被视为 POJO 的地方进行了即时尝试:

  "timestamp": {
    "seconds": 1584229103,
    "nanos" 0
  }

我尝试将其作为 OffsetDateTime 并得到:

  "timestamp": {
    "dateTime": {
      "date": {
        "year": 1970,
        "month": 1,
        "day": 19
      },
      "time": {
        "hour": 8,
        "minute": 3,
        "second": 46,
        "nano": 837000000
      }
    },
    "offset": {
      "totalSeconds": 0
    }
  }

我在春季级别尝试了各种事情,例如:

    @Bean
    public MappingJackson2MessageConverter configJacksonMessageConverter() {
        final MappingJackson2MessageConverter mappingJackson2MessageConverter = new MappingJackson2MessageConverter();
        ObjectMapper objectMapper = new ObjectMapper()
                .registerModule(new JavaTimeModule());
        mappingJackson2MessageConverter.setObjectMapper(objectMapper);
        return mappingJackson2MessageConverter;
    }

但他们没有任何效果。阅读https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-java#pojos听起来 azure-functions-java-worker 正在完成将 pojo 转换为 json 和它根本不使用杰克逊。如何通过值的自动序列化获得与 JavaTimeModule 类似的输出?我必须使用字符串输出吗?我找不到与此相关的文档,也没有示例。

4

1 回答 1

1

不幸的是有几层......

  • 使用jackson的spring cloud函数(默认情况下正确处理java.time.*)
    • 目前被窃听
  • 使用 gson 的天蓝色函数运行时 (azure-function-java-worker)
    • 目前被窃听

(当您使用更多的库(如 spring cosmos db)时,事情变得更加复杂,这些库需要为它们的目的进行序列化。这个库是 ms-cosmos-db 的包装器,它有自己的 jackson 实例/独立于 spring 实例。他们正在研究它 ... )

是的,我也与之抗争……但没有取得多大成功。

能够控制它

import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;

import java.io.IOException;
import java.time.Instant;
import java.time.format.DateTimeFormatter;

public class InstantGsonAdapter extends TypeAdapter<Instant> {

    @Override
    public void write(JsonWriter out, Instant value) throws IOException {
        out.value(DateTimeFormatter.ISO_INSTANT.format(value));
    }

    @Override
    public Instant read(JsonReader in) throws IOException {
        return Instant.parse(in.nextString());
    }
}

但它停止工作了......我还没有调查原因......可能是因为我试图修复/解决另一层的另一个错误。或者因为我昨天升级了)-:

提示:小心你在测试什么......你是否运行 Spring 云函数应用程序并调用它。或者您运行 azure 运行时 (mvn azure-functions:run) 并调用它...通常,spring 测试调用第一个。

(我会尝试查找并发布相关的错误......我现在不能,抱歉)

于 2021-01-20T20:38:33.787 回答