为何要做?
Hello!我又来了,最近公司需要我研究下用java的jerseyRestFul,并搭建一个环境用于测试。于是我打开了百度进行搜索,发现网上都是一些很旧的版本教程了,还是停留在JDK8甚至更低的版本中。那既然是研究新项目,那我就打算改头换面用一份较新的版本来做。
准备
https://jdk.java.net/archive/
下载一份较新的JDK版本,现在最新的openJDK已经发展到了22但是太新我不敢用啊,出了问题也搜不到答案不是,所以选择了主流的JDK17。
https://tomcat.p2hp.com/
下载tomcat10。
将以上工具从官网下载好之后进行安装,这些网上都有安装教程我就不做介绍了,简单的一米!
开始
在eclipse建立动态web项目,然后就要开始在lib包里注入jersey所需的依赖了,我还配置了logback作为我得日志工具,我将贴出所有依赖名单,直接看名单!!!
依赖包:
把我文章顶部的资源包下载再来解压无脑导入即可(除电脑端可能看不到,可以访问链接:https://download.csdn.net/download/junxkkoo/89123598?spm=1001.2101.3001.9500),或者你们根据jar自行去maven官网下载。
接下来就是第一个demo的编写啦,创建一个类:
这个post方法里面的代码随便你写,获取参数和返回内容都有好几种写法,可以在百度里面搜jersey的教程,我这里就写了测试需要的,你们自行实现自己的。
代码:
@POST
@Path("Server")
// 是否返回json
// @Produces(MediaType.APPLICATION_JSON)
public Response getToken(String params) {
String resp = "";
try {
if (params == null || params == "") {
return Response.status(Response.Status.BAD_REQUEST).entity("缺少必要参数!").type(MediaType.TEXT_PLAIN)
.build();
} else {
logger.info("接口到请求参数: " + params);
String formatDate = sdf.format(new Date());
// JSONObject jsonObject = new JSONObject(params);
// String token = (String) jsonObject.get("token");
resp = "{\"data\":\"{\\\"Result\\\":-1,\\\"ErrorNo\\\":0,\\\"Command\\\":\\\"BF\\\",\\\"Buffer\\\":\\\"\\\",\\\"EmployeeID\\\":\\\"1006\\\","
+ "\\\"ServerDateTime\\\":\\\""+ formatDate + "\\\"}\",\"errcode\":\"0\",\"errmsg\":\"fail\"}";
}
} catch (Exception e) {
logger.error("接口访问异常: " + e.getMessage());
}
logger.info("接口返回信息: " + resp);
return Response.ok(resp).build();
}
当然你也可以写一个很简单的get访问:
@GET
@Path("getHello")
@Produces(MediaType.APPLICATION_JSON)
public String getHello() {
// logger.info("【getHello】接口访问成功!");
return "成功了!";
}
然后配置web.xml,打开往里贴!
<servlet>
<servlet-name>JerseyServletContainer</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<!-- 官方扫描 -->
<!-- <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.mds.servlet</param-value> -->
<!-- 自定义扫描 -->
<param-name>jakarta.ws.rs.Application</param-name>
<param-value>com.mds.servlet.Application</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JerseyServletContainer</servlet-name>
<url-pattern>/mds/*</url-pattern>
</servlet-mapping>
官方扫描就可以了,如果想跟我一样是自定义扫描(我就是为了好奇试试能不能用嘿嘿),需要再写一个类哦:
public class Application extends ResourceConfig{
public Application() {
//位置指定包或者指定类
packages("com.mds.servlet");
// register(JerseyServlet.class);
}
}
这个类里面把之前写的接口程序所在的包注册进去。这样就能扫描到了。
接下来就是启动tomcat,打开postman进行测试:
GET访问地址:http://172.16.133.4:8080/mdsJerseyRestful/mds/rest/getHello/
POST访问地址:http://172.16.133.4:8080/mdsJerseyRestful/mds/rest/Server
怎么样?简单吗!这就实现啦,然后你们就可以自由发挥了。对了!!!还有一种启动方式哦,不需要tomcat的方式,有兴趣的继续往下看!
如果不用tomcat启动那我们想想 是不是可以写一个main来启动呢??
代码:
public class Main {
private static Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
try {
Properties prop = new Properties();
prop.load(new FileInputStream("config.properties"));
String ip = prop.getProperty("IP");
String prot = prop.getProperty("PROT");
logger.info("IP: " + ip);
logger.info("PROT: " + prot);
// 配置资源
Application application = new Application();
// 创建服务器
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create("http://"+ip+":"+prot+"/"),
application);
// 启动服务器
server.start();
logger.info("服务启动成功!!!");
// 等待输入
// System.in.read();
// 停止服务器
// server.shutdown();
} catch (Exception e) {
logger.error("服务启动异常:" + e.getMessage());
}
}
}
因为我的ip和端口是读取的外部文件,你们可以在这里直接写死。
然后这里启动main函数,注意现在的访问路径可不一样了,将没有项目名和web.xml的地址匹配。直接就是http://IP:端口/类地址/方法地址
GET的访问地址:http://172.16.133.4:8080/rest/getHello
POST的访问地址:http://172.16.133.4:8080/rest/Server
以上就是jersery的搭建啦,你们学会了吗?