In Spring Boot + Mustache template environment, if we didn’t assign a value to a
{{variable}}
on the Mustache’s page, the jmustache will throws the following error messages :com.samskivert.mustache.MustacheException$Context: No method or field with name 'variable' on line xx
at com.samskivert.mustache.Template.checkForMissing(Template.java:316) ~[jmustache-1.13.jar:na]
at com.samskivert.mustache.Template.getValue(Template.java:224) ~[jmustache-1.13.jar:na]
at com.samskivert.mustache.Template.getValueOrDefault(Template.java:269) ~[jmustache-1.13.jar:na]
P.S Tested with Spring Boot 1.5.2.RELEASE
Solution 1
If the variable is optional, try to wrap like this:
{{#variable}}
{{.}}
{{/variable}}
Alternatively, in Spring Boot, override the
Mustache.Compiler
to provide a default value globally:SpringBootWebApplication.java
package com.mycareerrepublic.web;
import com.samskivert.mustache.Mustache;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.mustache.MustacheEnvironmentCollector;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.Environment;
@SpringBootApplication
@ComponentScan({"com.mycareerrepublic"})
public class SpringBootWebApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootWebApplication.class, args);
}
//Override MustacheAutoConfiguration to support defaultValue("")
@Bean
public Mustache.Compiler mustacheCompiler(Mustache.TemplateLoader mustacheTemplateLoader,
Environment environment) {
MustacheEnvironmentCollector collector = new MustacheEnvironmentCollector();
collector.setEnvironment(environment);
// default value
Mustache.Compiler compiler = Mustache.compiler().defaultValue("")
.withLoader(mustacheTemplateLoader)
.withCollector(collector);
return compiler;
}
}
0 comments:
Post a Comment