IDEA java开发 Restful 风格的WebService

时间:2024-03-12 21:18:08

  官网:https://www.jetbrains.com/help/idea/restful-webservices.html

 

  1、在IntelliJ中创建新项目,选择Java Enterprise -> RESTful Web Service -> Download

 

  

  

 

 

  2、创建完项目JerseyDemo后,对项目点击右键 -> Add Frameworks Support,分别勾选Web Application和Maven。其中,web appication为项目增加了web.xml,maven为构建工具。

  

  

  

  完成之后项目的文件结构如下:

  

 

  

  3、 在maven中加入jersey依赖

<properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.9</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.9</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>2.9</version>
        </dependency>
    </dependencies>
View Code

 

  此时,整个pom.xml文档如下。另外使用maven默认的库下载源文件很慢,可以使用国内镜像,方法可见maven国内镜像(maven下载慢的解决方法)

 

  4. 创建源文件

  在src/java目录下新建包,如com.test.jersey,在包下新建类HelloWorld.java,写上代码:

package com.test.jersey;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/hello")
public class HelloWorld {
    //GET注解设置接受请求类型为GET
    @GET
    //Produces表明发送出去的数据类型为text/plain
    // 与Produces对应的是@Consumes,表示接受的数据类型为text/plain
    @Produces("text/plain")
    public String getMessage() {
        return "Hello world!";
    }
}
View Code

  

  5. 配置servlet

  编辑web/WEB-INF/web.xml,加入代码:

<servlet>
        <servlet-name>restful_service_test</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.test.jersey</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>restful_service_test</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>

  

  6、 配置Tomcat

  点击Run >Edit Configurations… > “+” > Tomcat Server > Local,加入Tomcat,选择Deployment tab, 点击 “+”, 选择唯一的Artifact,点击"OK"即可。

  

  

  

  7、在输出中加入库文件

  选择Project Structure,点击Artifacts,可以右侧Available Elements下面有很多库文件没有包含在输出中。依次双击各个文件即可。

  

 

 

  

  8. 运行Tomcat

  运行Tomcat,在浏览器中输入http://localhost:8080/api/hello,即可看到以下输出:

  

 

   9、增加SolrService类,访问solr服务

  

package com.solr.service;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.Cluster;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.ClusteringResponse;

import org.apache.solr.common.SolrDocumentList;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 * @Author:sks
 * @Description:
 * @Date:Created in 9:56 2018/2/26
 * @Modified by:
 **/
public class SolrService {

    private  SolrClient solr;


//    public SolrService(){
//        String urlString = "http://localhost:8983/solr/test";
////        HttpSolrServer hs=new HttpSolrServer("http://localhost:8888/solr");
//
//        solr = new HttpSolrClient.Builder(urlString).build();
//    }
    /**
     * @Author:sks
     * @Description:初始化solr客户端
     * @Date:
     */
    public  void Init(){

        String urlString = "http://localhost:8983/solr/test";
        solr = new HttpSolrClient.Builder(urlString).build();
    }
//    public static void main(String[] args) throws SolrServerException,IOException {
//
////        String urlString = "http://localhost:8983/solr/mycore";
//        String urlString = "http://localhost:8983/solr/test";
//        String path = "D:/work/Solr/ImportData";
//
//        Init(urlString);
//        getAutoClusterInfo();
//        System.exit(0);
//    }

    /**
     * @Author:sks
     * @Description:获取文档总数
     * @Date:
     */
    private  long getDocTotalCount()  {
        long num = 0;
        try {
            SolrQuery params = new SolrQuery();
            params.set("q", "*:*");
            //params.setQuery("*:*");
            QueryResponse rsp = solr.query(params);
            SolrDocumentList docs = rsp.getResults();
            num = docs.getNumFound();
        } catch (SolrServerException e) {
            e.printStackTrace();
        }

        catch (IOException e) {
            e.printStackTrace();
        }
        return num;
    }
    /**
     * @Author:sks
     * @Description:获取聚类数据
     * @Date:
     */
    public   String  getAutoClusterInfo() {
        //使用这个对象做查询
        SolrQuery params = new SolrQuery();
        //查询所有数据
        params.set("qt", "/clustering");
        params.setQuery("*:*");
        params.setStart(0);
        params.setRows((int)getDocTotalCount());
//        params.setRows(30);
        List<Cluster> list = null;
        try {
            QueryResponse queryResponse = solr.query(params);
            ClusteringResponse clr = queryResponse.getClusteringResponse();
            list = clr.getClusters();
            //拿到聚类数据集合,返回查询结果

        } catch (SolrServerException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        String  txt = "";
        List<String> lst = new ArrayList<String>();
        for(Cluster c :list){
            //类别标签
            List<String> lblist = c.getLabels();
            for(String lb:lblist){
                System.out.println(lb);
            }
            //聚类文档ID
            List<String> doclist  = c.getDocs();
            for(String doc:doclist){
                lst.add(doc);
                System.out.println("        " + doc);
            }
        }

        return "abc";
    }
}
View Code

  在增加getSolrData方法

 @GET
    @Produces("text/plain")
    @Path("/getSolrData")
    //api/solrData/getSolrData
    public String getSolrData() {
        SolrService ss = new SolrService();
        ss.Init();
        String s = ss.getAutoClusterInfo();
        return s;
    }

  运行tomcat,在浏览器输入:http://localhost:8080/api/hello/getSolrData

   

  原因找了半天是因为web.xml里面

  

 

  改为 com.solr.service

  

 

  重新运行tomcat 在浏览器输入:http://localhost:8080/api/hello/getSolrData 还是报错

  

  

  原因是Artifacts新加入的jar包没有包含在输出中,依次双击各个文件即可加入到输出中。

  

  终于成功了