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

标签 java jackson thymeleaf

既然 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/

相关文章:

java, generics - 如何参数化一个类型为 T 的类,这两个类型都是 : extends and implements sth

java - 当主题中没有更多记录时,如何刷新Kafka Consumer中的数据批处理

java - @JSonIgnore 注释的等效代码设置是什么?

java - Spring + jackson : How to set visibility of a class without using @JsonAutoDetect annotation

css - 从 Thymeleaf 中的模型对象设置 CSS 变量

java - 通过 Gradle 生成 EMF 模型

java - glassfish部署错误

java - 无法使用 Jackson 解析 XML,模型永远不会被填充

spring - 如何访问 Thymeleaf 中包含点的 Spring MVC 模型属性名称

java - Thymeleaf <select> 标签生成选项(数字)