当前位置:网站首页>Jersey2.25.1集成freemarker
Jersey2.25.1集成freemarker
2022-07-24 05:15:00 【kse_music】
一、配置类中添加属性配置和注册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");//如果.ftl不在返回视图里,而是通过include引进去的,受此属性影响,不受@Produces影响
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);
}
}
边栏推荐
- Tips for using the built-in variable vars in BeanShell
- The difference between compiled language and interpreted language
- 【深度学习】(三)图像分类
- 反射的介绍
- 浅谈不可转让的声誉积分NFT SBTs面临的困境
- Heavy! The 2022 China open source development blue book was officially released
- C primer plus learning notes - 6. Arrays and pointers
- JMeter upload and download files
- Read the summary of "machine learning - Zhou Zhihua"
- ssm的整合
猜你喜欢

Update C language notes

Theoretical basis of machine learning

DHCP principle and configuration

XML schema

Beginners' preparation for the Blue Bridge Cup (University Programming learning history records, topic ideas for students who need to prepare for the Blue Bridge Cup)

How can NFT, whose stars enter the market against the market, get out of the independent market?

Kingbase v8r6 cluster installation and deployment case - script online one click capacity reduction

Ren Xudong, chief open source liaison officer of Huawei: deeply cultivate basic software open source and jointly build the root technology of the digital world

PPPoE gateway simulation environment setup

This article takes you to understand C string functions and memory functions in simple terms
随机推荐
How to set up an internal wiki for your enterprise?
Icml2022 | rock: causal reasoning principle on common sense causality
智能指针、左值引用右值引用、lambda表达式
MGRE and OSPF comprehensive experiment
Chapter5 foundation of deep learning
Dictation SC or Pb file is read-write control ensor is
generator生成器,只生成两个方法
Infineon launched the world's first TPM security chip with post quantum encryption technology for firmware update
How can NFT, whose stars enter the market against the market, get out of the independent market?
finally和return的执行顺序
Career planning route
Source code compilation!!
Use of fiddler packet capturing tool
DNS domain name resolution service
I'm interested in reading efficient reading - the most cost-effective self investment
【深度学习】(三)图像分类
Memorandum 2022
XML schema
NLP learning roadmap (mind map) is very comprehensive and clear!
反射的介绍