gpt4 book ai didi

java - 有什么办法可以在 Thymeleaf 3.0.5 中添加 ExclusionStrategy 吗?

转载 作者:行者123 更新时间:2023-12-02 13:19:07 33 4
gpt4 key购买 nike

既然 Thyemleaf 3.0.5 使用 Jackson,有什么方法可以添加 com.google.gson.ExclusionStrategy 之类的内容吗?

也与此相关:

Thymeleaf inline javascript ignore null

更新:

使用 Metroids 建议的答案,我能够让它发挥作用。我首先必须从 XML 配置文件切换到使用 java 配置文件来配置 Thymeleaf。然后我就能够访问 StandardDialect,如 Metroids 所示。我实现了 IStandardJavaScriptSerializer 接口(interface),覆盖 #serializeValue(Object object, Writer writer)。

IStandardJavaScriptSerializer 实现片段...

@Override
public void serializeValue(Object object, Writer writer) {
try {
ExclusionStrategy exclusionStrategy = new MyApiJsonExcludeExclusionStrategy();
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setExclusionStrategies(exclusionStrategy);
Gson gson = gsonBuilder.create();
writer.write(gson.toJson(object));
} catch (IOException e) {
throw new TemplateProcessingException("An exception was raised while trying to serialize object to JavaScript using Gson", e);
}
}

Thymeleaf Java 配置片段...

@Bean
public TemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setEnableSpringELCompiler(true);

Set<IDialect> dialects = engine.getDialects();
StandardDialect dialect = (StandardDialect) dialects.stream()
.filter(d -> d instanceof StandardDialect)
.findFirst()
.get();
dialect.setJavaScriptSerializer(new MyThymeleafJavascriptSerializer());

engine.setTemplateResolvers(getTemplateResolvers());
engine.setAdditionalDialects(getAdditionalDialects());
return engine;
}

最佳答案

是的,这是可能的......但在我看来,这样做仍然有点丑陋(因为没有简单的方法可以在不自己创建一个的情况下访问 ObjectMapper)。我通过这样做来完成它...首先,无论您在何处配置模板引擎,您都应该能够访问 StandardDialect。

    Set<IDialect> dialects = templateEngine.getDialects();
StandardDialect dialect = (StandardDialect) dialects.stream()
.filter(d -> d instanceof StandardDialect)
.findFirst()
.get();

从那里您可以创建自己的IStandardJavaScriptSerializer,您可以在其中根据需要配置ObjectMapper。 (我用这行代码创建了一个 SpecialJacksonSerializer this.mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 来验证它是否有效。)

dialect.setJavaScriptSerializer(new SpecialJacksonSerializer());

由于 thymeleaf 在后台进行了大量配置(请参阅 this file ),因此您最终会在创建自己的代码时复制大量代码。如果您可以调用 dialect.getJavaScriptSerializer().getObjectMapper() 或类似的东西,那就太好了,但看起来不可能。

关于java - 有什么办法可以在 Thymeleaf 3.0.5 中添加 ExclusionStrategy 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43638788/

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