使用IDEA搭建SpringBoot工程 使用Post请求访问Http

简述

        新手小白,由于要向别人的服务器发送Post请求而自己这边没有服务器,所以自己就简单的搭建了一个小型的服务器做测试。

Create New Project

        打开IntelliJ IDEA后选择Create New Project新建一个工程,然后在打开窗口中选择Spring Initializr,因为我这Java版本是1.8的,所以在点击Next后的窗口中,JavaVersion选择了8,至于其他的就按照自己意思来填写了,值得注意的是Artifact这里需要全部小写。

        在打开 的窗口中左边的Dependencies找到Web项,需要选择 Spring Web,然后就直接Next了,最后修改下工程保存的路径,点击Finish结束工程创建。

配置Maven

        网上下载apache-maven-3.6.1-bin.zip(文章后面有下载链接,当然也可以是其他的版本),这个maven配置包是必须的,解压后放到一个指定的目录下,我这里放到了D:\XXXX\IDEA\Maven下。

        依次打开File->Settings,然后直接搜索Maven。Maven home directory:表示刚才解压的包所在目录,User settings file:表示解压的包里面的一个settings.xml所在目录,最后一个Local repository:是自己建立的一个目录,这个目录是以后所有包自动下载后存放的位置,这些东西都是一次性配置好就行。

Http

        在src->main->java->com.example.httpserver下,右键弹出菜单New->Package建立一个包Controller,然后再Controller里添加一个Java Class,也是右键弹出菜单New->Java Class,类名自己随意就好。

        以下就是Http服务器接收Post请求后的处理操作,请注意Post请求头是带有Authorization信息的,里边包含了用户名跟密码 Base64(userName:password),其中用户名跟密码是可以有Base64加密的,所以在接收到Post请求后需要解码Base64(已注释),实际上我是需要Base64加密解密的但是这里做测试就不带上了,值得注意一下@RequestMapping是相当于这个类接口的起始地址,而每个接口前面的@PostMapping相当于每个函数的接口起始地址,所以如果类前面有@RequestMapping的话那就表明你们村就在那看你想去访问哪一户人家了: 

package com.example.httpserver.Controller;

import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

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


@Controller
@RequestMapping("/deviceApi")
public class ProductInfoController {
    @ResponseBody
    @PostMapping(value = "/invokeSrv",produces = "application/json;charset=UTF-8")
    public JSONObject recvProductInfo(@RequestBody BodyInfo body,
                                HttpServletRequest request,
                                HttpServletResponse response) throws IOException {
        // 设置编码格式
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        // 获取Authorization 验证信息如下
        System.out.println("获取Authorization 验证信息如下: ");
        System.out.println("Authorization: " + request.getHeader("Authorization"));

        // 根据空格" " 分割字符串"Basic userName:userPass"
        String[] auth = request.getHeader("Authorization").split(" ");
        if (auth.length < 2){
            return printWriter(body, "NG", "获取认证信息错误");
        }

        // 解密账号和密码
        String userinfo = auth[1];
//        try {
//            BASE64Decoder decoder = new BASE64Decoder();
//            userinfo = new String(decoder.decodeBuffer(auth[1]), "UTF-8");
//        } catch (Exception e) {
//            e.printStackTrace();
//            return printWriter(body, "NG", "解密失败");
//        }

        // 根据冒号":" 分割字符串"userName:userPass"
        String[] up = userinfo.split(":");
        if (up.length < 2) {
            return printWriter(body, "NG", "用户名或密码为空");
        }

        // 获取账号密码后做授权验证
        String user = up[0], password = up[1];
        System.out.println("user: " + user + " passwrod: " + password);
        if (!"root".equals(user) || !"123456".equals(password)) {
            return printWriter(body, "NG", "用户名或密码错误");
        }

        // 如果验证信息没有错误,返回给客户端信息
        return printWriter(body, "OK", "验证成功");
    }

    public JSONObject printWriter(BodyInfo body, String result, String message) {
        JSONObject json = new JSONObject(true);
        json.put("reqCode", body.reqCode);
        json.put("result", result);
        json.put("message", message);
        json.put("extend1", body.extend1);
        json.put("extend2", body.extend2);
        json.put("extend3", body.extend3);

        System.out.println(message);
        return json;
    }
}

        这里用到了 BodyInfo类作为接收参数,也是直接在包Controller下创建一个类叫BodyInfo:

package com.example.httpserver.Controller;

import lombok.Data;

@Data
public class BodyInfo {
    public String reqCode;
    public String reqTime;
    public String clientCode;
    public String tokenCode;
    public String interfaceName;
    public String deviceCode;
    public String workTime;
    public String status;
    public String sn;
    public String extend1;
    public String extend2;
    public String extend3;
    public String extend4;
    public String extend5;
    public String extend6;
    public String extend7;
    public String extend8;
    public String extend9;
    public String extend10;
    public Object[] detailList01;
}

        因为使用到了Json,所以是需要添加依赖的,在pom.xml文件中<dependencies>xxx</dependencies>添加以下内容:

        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>

Postman       

        使用Postman测试一下,其中http://localhost:8080/deviceApi/invokeSrv,localhost:8080表示你本机的IP与服务器默认端口号,/deviceApi表示这个类的起始地址,/invokeSrv表示类函数的起始地址:

        可以看到Post请求后,程序已经跳到了断点位置,显示并且打印了用户名跟密码。

        需要工具的可以自行下载:https://pan.baidu.com/s/1iGMZrEAjBOUM9RoNgRTFLg 提取码:6DC1 

        资源下载地址:https://download.csdn.net/download/Ilson_/13651532

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ilson_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值