2017-04-26 2 views
0

Thyemleaf 3.0.5가 Jackson을 사용하고 있으므로 com.google.gson.ExclusionStrategy 같은 것을 믹스에 추가 할 수있는 방법이 있습니까?Thymeleaf 3.0.5에 ExclusionStrategy를 추가 할 수있는 방법이 있습니까?

은 또한이 관련 :

Thymeleaf inline javascript ignore null

UPDATE :

나는이 작업을 얻을 수 있었다 Metroids가 제시 한 해답을 사용. 먼저 XML 구성 파일에서 Thymeleaf 구성을위한 Java 구성 파일로 전환해야했습니다. 그런 다음 Metroids에 표시된 것처럼 StandardDialect에 액세스 할 수있었습니다. #serializeValue (Object object, Writer writer)를 오버라이드하는 IStandardJavaScriptSerializer 인터페이스를 구현했습니다.

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 자바 구성 조각 ...

@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를 직접 만들지 않고도 쉽게 얻을 수 있기 때문에). 이 작업을 통해이 작업을 수행했습니다. 첫째, 템플릿 엔진을 구성 할 때마다 StandardDialect에 액세스 할 수 있어야합니다.

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

거기에서 당신은 그러나 당신이 원하는 ObjectMapper를 구성 할 수있는 자신 만의 IStandardJavaScriptSerializer을 만들 수 있습니다. (나는이 일을 확인하는 코드 this.mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);의이 라인으로 SpecialJacksonSerializer를 만들었습니다.)

thymeleaf 백그라운드에서 구성을 많이하고 있기 때문에
dialect.setJavaScriptSerializer(new SpecialJacksonSerializer()); 

(this file 참조), 해당 코드를 할 때 많이 복사 끝 당신 자신을 창조하십시오. dialect.getJavaScriptSerializer().getObjectMapper() 또는 그와 비슷한 전화를 걸면 좋겠지 만 가능하지는 않습니다.

+0

감사합니다. 이것은 내가 필요로했던 것의 95 %였다. XML 구성을 사용하여 Java 구성을 사용하도록 전환 한 다음 기본적으로 여기에있는 작업을 수행 할 수있었습니다. 나는 내 자신의 IStandardJavaScriptSerializer를 구축 한 끝에 질문에 대한 내 업데이트의 코드를 보았다. 다시 한 번 감사드립니다. – kasdega