servletoutputstream写数据返回不完整

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servletoutputstream写数据返回不完整相关的知识,希望对你有一定的参考价值。

参考技术A 下面记录下最近遇到的一个小问题。对于 inputStream 流的操作,有时候为了方便,相信有不少人会像如下一样操作。
获取 inputStream 流 -> 获取数据长度 -> 开辟byte存储空间 -> 一次性读取数据到 byte[] -> 使用byte数据(写出或其他) -> 依次关闭流

以上操作如果是针对本地文件读取,那么没啥问题。但是如果放到网络环境,问题就出现了。且看如下代码:
@RequestMapping("/demo.do")
public void demo(HttpServletResponse resp)
InputStream is = null;
OutputStream os = null;
try
String url = "http://xxxxxxxxxxxxxxx";
URL realUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection()

转载php如何给APP端写接口

如何写好接口

  1. 目的:清楚明白所写接口的用途
  2. 安全性:做好接口的安全性,防止接口数据泄露,做好必要的参数加密措施
  3. 按需分配: 接受值和返回值要实用,不接受和返回不需要的数据,返回值返回什么应与使用者时时沟通
  4. 规范性:参数命名规范有意义,让使用者一目了然;返回值要包含调用接口状态信息,返回数据格式最好使用JSON
  5. 日志:写接口调用日志,方便查到接口调用错误,实现监控和对接快捷

接口安全性与规范性参考

/**
     * 用户登录接口
     * 请求方式:post
     * 接受参数:
     * @param $mobile 用户名         -- 可逆 通过 urlencode(base64_encode()) 加密
     * @param $pwd    加密密码     -- 可逆,同时定义一个加密规则
     * return json
     * {"code":int,"message":string,"data":array}
     * 注意事项:
     *
     */
    public function login() {
        $mobile = isset($_POST[‘mobile‘]) ? base64_decode(urldecode(escapeQuotes($_POST[‘mobile‘]))) : ‘‘;
        $pwd = isset($_POST[‘pwd‘]) ? escapeQuotes($_POST[‘pwd‘]) : ‘‘;
        $totp = isset($_POST[‘ttoken‘]) ? escapeQuotes($_POST[‘ttoken‘]) : ‘‘;
        $commonmodel = self::getModel(‘common‘);
        try {
            // 检查参数
            $commonmodel->checkRight($mobile, ‘mobile‘);
            $commonmodel->checkRight($pwd, ‘pwd‘);
            $commonmodel->checkRight($totp, ‘ttoken‘);
            // 验证登录
            $usersmodel = self::getModel(‘users‘);
            $res = $usersmodel->userLogin($mobile, $pwd);
        } catch (Exception $e) {
            $res = array(
                ‘code‘ => 10000,
                ‘message‘ => $e->getMessage()
            );
        }
        // 写入接口日志
        $des = "IP:" . getIp() . ";请求用户登录接口;返回:" . $res[‘message‘];
        $commonmodel->logResult(‘10001‘, $res[‘code‘], $des);

        echo json_encode($res);
    }

接受的参数,比如用户名和密码都进行了加密处理,密码可以定义一个更安全的加密规则,抓包查看请求参数也不会暴露用户数据。 

调用接口写好接口日志,记录调用什么接口,返回状态码,接口返回详情等等。。。

返回值参考

{
    code:0,
    message: "success",
    data: { key1: value1, key2: value2, ... }
}
  • code: 返回状态码,1表示成功,非1表示各种不同的错误,10000可以用来表示客户端传参错误
  • message: 描述信息,成功时为”success”,错误时则是错误信息
  • data: 成功时返回的数据,类型为对象或数组

不同错误就要定义不同的返回状态码,这里举个例子:

状态码表

返回值 说明 
10000 执行异常,一般为客户端传参出错 
10001 用户不存在 
10002 密码错误 
10003 用户状态未激活 
10004 redis保存值错误 
10005 令牌(token)错误 
10006 二维码序列错误 
10007 验票错误 
1 验证成功,返回需要信息

10000可以定义为客户端传入的参数有错,直接抛出异常,区别客户端与服务端之间的错误

 

 

本文转载至:http://blog.csdn.net/xwh670570759/article/details/52130585










以上是关于servletoutputstream写数据返回不完整的主要内容,如果未能解决你的问题,请参考以下文章

在文件下载时返回字节数组或servlet输出流之间是否存在差异?

如何通过 ServletOutputStream 以 UTF-8 编码发送字符

PrintWriter返回乱码的分析及解决

excel中if函数若满足条件返回“是”,不满足条件无返回值怎么写

Oracle数据库查询中返回指定的行数例如31到40,主键ID,但不连续,请问这样的语句如何写?

linux下写串口不成功,写函数总是返回-1