一、配置類中添加屬性配置和註冊FreemarkerMvcFeature
//register(MvcFeature.class);
property(MvcFeature.TEMPLATE_BASE_PATH+".freemarker", "freemarker");
//property(MvcFeature.ENCODING+".freemarker", "GBK");//如果@Produces沒指定輸出編碼,則以此設置爲準,默認UTF-8
property(FreemarkerMvcFeature.TEMPLATE_OBJECT_FACTORY,new FreemarkerConfig(null));
register(FreemarkerMvcFeature.class);//依賴MvcFeature
二、書寫freemarker配置
import com.hiekn.demo.exception.FtlException
import com.hiekn.demo.util.FtlMethod
import freemarker.cache.*
import freemarker.template.Configuration
import freemarker.template.DefaultObjectWrapper
import freemarker.template.Version
import jersey.repackaged.com.google.common.collect.Lists
import org.glassfish.jersey.server.mvc.freemarker.FreemarkerConfigurationFactory
import org.jvnet.hk2.annotations.Optional
import javax.inject.Inject
import javax.servlet.ServletContext
import java.io.File
import java.util.List
import java.util.Properties
public class FreemarkerConfig implements FreemarkerConfigurationFactory {
protected final Configuration configuration
@Inject
public FreemarkerConfig(@Optional final ServletContext servletContext){
Version version = Configuration.VERSION_2_3_23
configuration = new Configuration(version)
configuration.setSharedVariable("cutStr", new FtlMethod())
configuration.setDefaultEncoding("utf-8")
configuration.setTemplateExceptionHandler(new FtlException())
configuration.setIncompatibleImprovements(version)
configuration.setObjectWrapper(new DefaultObjectWrapper(version))
final List<TemplateLoader> loaders = Lists.newArrayList()
Properties p = new Properties()
try {
p.load(FreemarkerConfig.class.getClassLoader().getResourceAsStream("freemarker.properties"))
configuration.setSettings(p)
if (servletContext != null) {
loaders.add(new WebappTemplateLoader(servletContext))
}
loaders.add(new ClassTemplateLoader(FreemarkerConfig.class, "/"))
loaders.add(new FileTemplateLoader(new File("/")))
} catch (Exception e) {
e.printStackTrace()
}
configuration.setTemplateLoader(new MultiTemplateLoader(loaders.toArray(new TemplateLoader[loaders.size()])))
}
@Override
public Configuration getConfiguration() {
return configuration
}
}
三、書寫視圖控制器
import freemarker.ext.beans.BeansWrapper
import freemarker.ext.beans.BeansWrapperBuilder
import freemarker.template.Configuration
import freemarker.template.TemplateHashModel
import freemarker.template.TemplateModelException
import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import io.swagger.annotations.ApiResponse
import io.swagger.annotations.ApiResponses
import org.apache.log4j.Logger
import org.glassfish.jersey.server.mvc.Template
import org.glassfish.jersey.server.mvc.Viewable
import org.springframework.stereotype.Controller
import javax.servlet.http.HttpServletRequest
import javax.ws.rs.*
import javax.ws.rs.core.Context
import javax.ws.rs.core.MediaType
import java.util.HashMap
import java.util.Map
@Controller
@Path("/ftl")
@Produces(MediaType.TEXT_HTML+";charset=UTF-8")
@Api("返回視圖")
public class Ftl {
static final Logger log = Logger.getLogger(Ftl.class)
@GET
@Path("/test")
@ApiOperation("測試返回視圖")
public Viewable exampleView(@Context HttpServletRequest request) {
Map<String, Object> data = new HashMap<>()
data.put("test", "this is the ViewResource test text")
data.put("request", request)
BeansWrapper wrapper = new BeansWrapperBuilder(Configuration.VERSION_2_3_23).build()
TemplateHashModel staticModels = wrapper.getStaticModels()
data.put("statics", staticModels)
TemplateHashModel enumModels = wrapper.getEnumModels()
data.put("enums",enumModels)
try {
TemplateHashModel fileStatics = (TemplateHashModel) staticModels.get("java.io.File")
data.put("File", fileStatics)
TemplateHashModel roundingModeEnums = (TemplateHashModel) enumModels.get("java.math.RoundingMode")
data.put("RoundingMode", roundingModeEnums)
} catch (TemplateModelException e) {
e.printStackTrace()
}
return new Viewable("/test", data)
}
@Path("/")
@GET
@Template(name = "/index")
@ApiOperation("測試返回視圖默認頁")
public Map<String, Object> indexView() {
Map<String, Object> map = new HashMap<>()
System.out.println("我是首頁")
return map
}
@Path("{path}")
@GET
@ApiOperation("根據請求路徑返回對應頁")
public Viewable common(@PathParam("path") String path) {
Map<String, Object> map = new HashMap<>()
return new Viewable("/"+path,map)
}
}