Servlet如何数据接收以及返回JSON

1. 前记:

     ~~~~     大学专业课有时候只允许使用Servlet去完成去期末, 但是你又想进行前后端分离开发, 并且遇到了Servlet用getParameter获取不到JSON数据的问题, 然后我就想通过这篇文件把我解决的办法写出来

2. 解决办法:

2.1 读取数据:

const result = await axios.post(Constant.HTTP + '/customer/login', {
    name: name.value,
    password: password.value,
    inputCode: inputValidCode.value,
}, {
    headers: {
      'content-type': 'application/json'
    }
})

     ~~~~     这里用的是Vue3写的Axios, 这是我写的一个简单的向后端传入的登入数据, 传入了用户名, 密码和验证码。 需要注意的点, headers(请求头)中一定要明确content-type类型为application/json

public static JSONObject getJSON(HttpServletRequest req) throws IOException {
    ServletInputStream inputStream = req.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder jsonBuilder = new StringBuilder();
    String line;
    try {
        while ((line = reader.readLine()) != null) {
            jsonBuilder.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace(); 
        throw e;
    }
    System.out.println(jsonBuilder.toString());
    return JSONObject.parseObject(jsonBuilder.toString());
}

     ~~~~     这就是Servlet将JSON数据转为Java对象的部分), 其中:

ServletInputStream inputStream = req.getInputStream();

     ~~~~     这里是获取请求体里的内容, 就是刚刚传入的JSON数据

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder jsonBuilder = new StringBuilder();
String line;
try {
    while ((line = reader.readLine()) != null) {
        jsonBuilder.append(line);
    }
} catch (IOException e) {
    e.printStackTrace(); 
    throw e;
}

     ~~~~     这里就是读取其中的内容, 可能有对Java输入输出流不熟悉的小伙伴, 这里我贴一下构造方法 ,也解释一下BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))的含义

public BufferedReader(Reader in) 
InputStreamReader(InputStream in)

     ~~~~     其中InputStreamReader是Reader的子类,将字节流转为字符流;ServletInputStream类是Servlet中继承于InputStream的抽象类, 用于读取请求信息
这里为什么要将InputStream转为BuffereReader呢, 因为字节流不能读取汉字但字符流可以

return JSONObject.parseObject(jsonBuilder.toString());

     ~~~~     最后的代码是使用了FastJson库, 需要自己手动下一个.jar包并放入lib依赖中

2.2 获取数据:

     ~~~~     将数据读取到JSONobject中, 那现在就是如何获取数据了

User user = new User();
JSONObject jsonObject = JsonUtils.getJSON(req);
user.setName(jsonObject.getString("name"));
user.setPassword(jsonObject.getString("password"));
String inputCode = jsonObject.getString("inputCode");

     ~~~~     这里就是对应上面前端出入数据名字就行

2.3 返回数据:

PrintWriter out = resp.getWriter();
out.write(JSON.toJSONString(user));
out.flush();
out.close();

这里应该没有什么需要解释的

3. 尾声

     ~~~~     这是我发的第二篇文章,本来也没太想写, 毕竟我实力还是不太够, 如果写得问题太多反而有点误人子弟,但转念一想还是把这篇文章写出来了。 这篇文章还是有很多不足, 如果有问题之内的, 可以在评论区问我, 我看见都会回答的, 如果有axios请求之内的问题也能问, 我会的话还是会回答的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值