相关疑难解决方法(0)

我应该将Jackson的ObjectMapper声明为静态字段吗?

杰克逊图书馆的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)

java json jackson

334
推荐指数
3
解决办法
12万
查看次数

Spring Boot:控制每个请求的序列化响应中是否存在空字段

介绍

我们在 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)

java spring jackson spring-boot

4
推荐指数
1
解决办法
144
查看次数

标签 统计

jackson ×2

java ×2

json ×1

spring ×1

spring-boot ×1