在springboot中编写restful风格的API供其它的项目调用
1.导入依赖 pom.xml

 <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
            <scope>compile</scope>
        </dependency>
        <!-- Web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>9.4.12.v20180830</version>
        </dependency>
        <!-- 测试依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>1.5.8.RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.编写主启动类


import com.example.demo2.Test.UserHandle;
import org.eclipse.jetty.server.Server;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import java.net.InetSocketAddress;

@SpringBootApplication
public class Demo2Application {


    public static void main( String[] args ) throws Exception {
        JettyStart();
    }

    @Bean
    public static void JettyStart() throws Exception {
        InetSocketAddress isa = new InetSocketAddress("xx.xx.xx.xx", xx);//填写ip地址和端口
        Server server = new Server(isa);
        server.setHandler(new UserHandle());
        server.start();
        server.join();
    }
}

3.编写主要业务,此处比较简单返回值是一个User实体类


public class HelloUser {
    public User sayHello() {
        User us = new User();
        us.setUserName("zhangsan");
        us.setAge(19);
        return us;
    }
}

User实体类

package com.example.demo2.Test;

public class User {
    private String userName;
    private int age;
    public int getAge() {return age;}
    public void setAge(int age) {this.age = age;}
    public String getUserName() {return userName;}
    public void setUserName(String userName) {this.userName = userName;}
    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", age=" + age +
                '}';
    }
}

4.编写继承了AbstractHandler的handle方法,在handle中可以判断是何种请求,简单示例,省去。

import com.alibaba.fastjson.JSONObject;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class UserHandle extends AbstractHandler {

    @Override
    public void handle(String url, Request request, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException, ServletException {
        HelloUser helloUser = null;
        if (url.endsWith("/getUser")) {
            helloUser = new HelloUser();
        }
        JSONObject json = new JSONObject();
        User user = new User();
        if (helloUser != null) {
             user = helloUser.sayHello();
            json.put("result", user);
        }
        httpServletResponse.setCharacterEncoding("utf-8");
        httpServletResponse.setContentType("application/json; charset=utf-8");
        PrintWriter writer = httpServletResponse.getWriter();
        writer.write(json.toString());
        writer.flush();
        writer.close();
    }
}

5.访问测试
访问地址http://xx.xx.xx.xx:xx/getUser 就可访问
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐