2017-04-26 93 views
0

现在Thyemleaf 3.0.5正在使用Jackson,有什么方法可以将com.google.gson.ExclusionStrategy添加到组合中吗?有没有什么办法可以将ExclusionStrategy添加到Thymeleaf 3.0.5中?

也与此有关:

Thymeleaf inline javascript ignore null

UPDATE:

使用Metroids建议的答案,我能得到这个工作。 我首先必须从我的XML配置文件切换到使用java配置文件来配置Thymeleaf。然后我可以像Metroid所示的那样访问StandardDialect。我实现了IStandardJavaScriptSerializer接口重写#serializeValue(Object对象,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; 
} 

回答

1

是的,这是可能的...但它仍然是一种丑陋在我看来,做(因为没有简单的方法可以在没有创建ObjectMapper的情况下进入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()或其他类似的东西,那就太好了,但看起来好像不太可能。

+0

谢谢!这是我需要的95%。我不得不从使用XML配置切换到使用java配置,然后我能够基本上做到你在这里。我最终建立了自己的IStandardJavaScriptSerializer,在我对这个问题的更新中看到了代码。 再次感谢,非常感谢您的帮助。 – kasdega

相关问题