杰克逊图书馆的ObjectMapper课程似乎是线程安全的.
这是否意味着我应该将我声明ObjectMapper为像这样的静态字段
class Me {
private static final ObjectMapper mapper = new ObjectMapper();
}
Run Code Online (Sandbox Code Playgroud)
而不是像这样的实例级字段?
class Me {
private final ObjectMapper mapper = new ObjectMapper();
}
Run Code Online (Sandbox Code Playgroud) 介绍
我们在 Spring Boot 中实现了一个 REST API。目前它在序列化时返回所有字段。所以它返回类似
{
"foo": "A",
"bar": null,
"baz": "C",
}
Run Code Online (Sandbox Code Playgroud)
我们想要不返回空字段的选项,所以它只会返回
{
"foo": "A",
"baz": "C",
}
Run Code Online (Sandbox Code Playgroud)
对于那种情况 - 但仍然(如果bar有价值)
{
"foo": "A",
"bar": "B",
"baz": "C",
}
Run Code Online (Sandbox Code Playgroud)
我知道你可以控制它不通过应用程序属性返回空值,但这是一个现有的 AI,如果字段丢失,一些针对它实现的应用程序可能会在反序列化时失败。因此,我们希望让调用客户端控制它。我们的想法是有一个您可以发送的标题:X-OurCompany-IncludeNulls; false。这将允许客户进行选择,我们最初会默认使用,true但可能会随着时间的推移以管理方式更改默认设置。
我能找到的最接近的是这这是转向通过查询参数漂亮的印刷。当我尝试做类似的事情时,它适用于漂亮的打印。但是,对于包含,它适用于我启动 API 后的第一个请求,但之后每个其他请求都从第一个请求中获取值。我可以看到它正在通过断点设置它,并且我还针对相同的参数添加了漂亮打印,仅用于诊断目的。
我尝试过的细节
我们的 API 基于使用 Swagger Codegen 服务器存根生成的 API。我们使用委托模式,所以它生成一个控制器,它只有一个自动连接的委托和一个getDelegate
@Controller
public class BookingsApiController implements BookingsApi {
private final BookingsApiDelegate delegate;
@org.springframework.beans.factory.annotation.Autowired
public BookingsApiController(BookingsApiDelegate delegate) {
this.delegate = delegate;
}
@Override
public BookingsApiDelegate getDelegate() …Run Code Online (Sandbox Code Playgroud)