2017-04-26 3 views
0

Nun, da Thyemleaf 3.0.5 Jackson verwendet, gibt es eine Möglichkeit, etwas wie com.google.gson.ExclusionStrategy in den Mix hinzuzufügen?Gibt es eine Möglichkeit, Thymeleaf 3.0.5 eine ExclusionStrategy hinzuzufügen?

Thymeleaf inline javascript ignore null

UPDATE:

Mit der von Metroids vorgeschlagene Antwort ich diese Arbeit bekommen konnte

Auch im Zusammenhang mit diesem. Ich musste zuerst von meiner XML-Konfigurationsdatei zu einer Java-Konfigurationsdatei wechseln, um Thymeleaf zu konfigurieren. Dann konnte ich wie von Metroids gezeigt auf den StandardDialect zugreifen. Ich implementierte die IStandardJavaScriptSerializer-Schnittstelle mit dem Überschreiben von #serializeValue (Object-Objekt, Writer-Writer).

IStandardJavaScriptSerializer Implementierung Schnipsel ...

@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 Config-Schnipsel ...

@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; 
} 

Antwort

1

Ja, es ist möglich ... aber es ist trotzdem irgendwie hässlich meiner Meinung nach tun (Da es keinen einfachen Weg gibt, zum ObjectMapper zu gelangen, ohne selbst einen zu erstellen. Ich habe es geschafft, indem ich das getan habe ... Erstens, wo immer Sie Ihre Vorlagen-Engine konfigurieren, sollten Sie in der Lage sein, Zugang zu StandardDialect zu bekommen.

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

Von dort können Sie Ihre eigenen IStandardJavaScriptSerializer erstellen, in dem Sie die ObjectMapper konfigurieren können jedoch Sie wünschen. (I ein SpecialJacksonSerializer mit dieser Codezeile erstellt this.mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); um zu überprüfen, es funktioniert.)

dialect.setJavaScriptSerializer(new SpecialJacksonSerializer()); 

Seit thymeleaf im Hintergrund eine Menge Konfiguration tut (siehe this file), erhalten Sie eine Menge von diesem Code zu kopieren, wenn Erstellen Sie Ihre eigenen. Es wäre schön, wenn Sie dialect.getJavaScriptSerializer().getObjectMapper() oder so ähnlich anrufen könnten, aber es sieht nicht so aus, als wäre es möglich.

+0

Vielen Dank! Das war 95% von dem, was ich brauchte. Ich musste von der Verwendung der XML-Konfiguration zur Verwendung einer Java-Konfiguration wechseln und dann konnte ich im Grunde tun, was Sie hier haben. Ich habe meinen eigenen IStandardJavaScriptSerializer erstellt, siehe den Code in meinem Update zu der Frage. Danke nochmal, schätze deine Hilfe wirklich. – kasdega

Verwandte Themen