gpt4 book ai didi

Java 记录 (JEP359) 作为 Spring Controller 请求和响应 DTO

转载 作者:行者123 更新时间:2023-12-05 06:12:07 24 4
gpt4 key购买 nike

我只是在试验这些新的 Java 记录,我想知道我是否可以将它们用作 spring boot 应用程序中我的请求/响应类型的 DTO。

因此,我只是修改了一些代码(带有大量用于记录的样板 getter/setter 的类),编译并启动了我的应用程序。尝试一些休息端点,我得到的只是一个异常告诉我:

没有找到类 x.y.CreateNewShopListeCommand$Item 的序列化程序,也没有发现创建 BeanSerializer 的属性(为避免异常,禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS

好吧,记录不会创建带有“get”前缀的 getter 方法。现在我想知道:是否可以使用记录作为 spring boot Controller 的请求/响应类型?

编辑:示例应用程序(https://github.com/kaipaysen/playground-jdk14-records-as-dto)

// HelloController.java
@RestController
@RequestMapping("/hello")
public class HelloController {

public record HelloRequest(
@JsonProperty("name") String name
) {}

public record HelloResponse(
@JsonProperty("message") String message
) {}

@RequestMapping(method = RequestMethod.POST)
public HelloResponse hello(@RequestBody @Valid HelloRequest query) {
return new HelloResponse("Hello " + query.name());
}

}

调用 curl -X POST -H "Content-Type: application/json"-d '{"name":"Max"}' http://localhost:8080/hello 返回 {"message":"Hello null"}.调试 hello 显示 Request 未正确反序列化。有什么想法吗?

编辑#2:刚发现这个问题Support for JDK 14 record types #2709在 FasterXML 仓库中。他们正在为 jackson 2.12 开发它。

最佳答案

您需要将此类级别的注释添加到您的记录中。

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)

在 jackson 版本 1.12 中,它应该在没有注释的情况下可用。

我认为这是 Jackson 中的一个错误,您需要向记录中添加第二个字段,因为它不适用于只有一个字段的记录。

关于Java 记录 (JEP359) 作为 Spring Controller 请求和响应 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63712187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com