Java 有没有办法将排除策略添加到Thymeleaf 3.0.5中?
现在Thyemleaf 3.0.5正在使用Jackson,有没有办法在混合中添加com.google.gson.ExclusionStrategy之类的内容 与此相关的还有: 更新: 使用Metroids建议的答案,我能够实现这一点。 我首先必须从XML配置文件切换到使用java配置文件来配置Thymeleaf。然后我就可以使用Metroids显示的标准方言了。我实现了IStandardJavaScriptSerializer接口,覆盖serializeValueObject对象Writer Writer IStandardJavaScriptSerializer实现片段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
@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,请参见问题更新中的代码。再次感谢,非常感谢你的帮助。