Java 有没有办法将排除策略添加到Thymeleaf 3.0.5中?

Java 有没有办法将排除策略添加到Thymeleaf 3.0.5中?,java,jackson,thymeleaf,Java,Jackson,Thymeleaf,现在Thyemleaf 3.0.5正在使用Jackson,有没有办法在混合中添加com.google.gson.ExclusionStrategy之类的内容 与此相关的还有: 更新: 使用Metroids建议的答案,我能够实现这一点。 我首先必须从XML配置文件切换到使用java配置文件来配置Thymeleaf。然后我就可以使用Metroids显示的标准方言了。我实现了IStandardJavaScriptSerializer接口,覆盖serializeValueObject对象Writer W

现在Thyemleaf 3.0.5正在使用Jackson,有没有办法在混合中添加com.google.gson.ExclusionStrategy之类的内容

与此相关的还有:

更新:

使用Metroids建议的答案,我能够实现这一点。 我首先必须从XML配置文件切换到使用java配置文件来配置Thymeleaf。然后我就可以使用Metroids显示的标准方言了。我实现了IStandardJavaScriptSerializer接口,覆盖serializeValueObject对象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);
    }
}
@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;
}
Thymeleaf Java配置代码段

@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);
    }
}
@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,就无法轻松访问ObjectMapper。我是这样做的。。。首先,无论您在何处配置模板引擎,都应该能够访问标准方言

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

由于thymeleaf在后台进行了大量的配置,因此在创建自己的代码时,您会复制大量的代码。如果您可以调用dialent.getJavaScriptSerializer.getObjectMapper或类似的东西,那就太好了,但这似乎是不可能的。

谢谢!这是我需要的95%。我不得不从使用XML配置切换到使用java配置,然后我基本上可以完成这里的工作。我最终构建了自己的iStandarJavaScriptSerializer,请参见问题更新中的代码。再次感谢,非常感谢你的帮助。