2017-04-26 44 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

相關問題