java开发之路2016.12.26

本人初入门径。代码略显粗糙,欢迎指点改正!

最近在做公司的项目的时候,需要和其他公司进行业务上的对接,对方直接扔过来一个协议用来开发,最近稍微看了一下,写了一个通过协议获取数据的方法

对方的协议内容部分如下:

根据协议上的内容来看是可以通过http的方式来获取对应的业务数据的,但是发送的参数和返回的数据都是用的json格式,编码按照UTF-8的格式

因而写了以下一小段内容

private BackData getDataFromDH(String method,String param){
        URL url=null;    //自定义实体类,我自定义的是和对方返回的json对应的类型
        BackData data=null;
        try {    //此处参数baseurl、method、param合成一个完整的url 如  http://192.168.29.200:8080/dahuaIS/rest/statistic/picrecord/参数  //这里的参数param在后文会特别说明            url=new URL("http://"+baseurl+method+param);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();//获取连接        //这里的set方法主要设置一些请求头的参数
            connection.setRequestMethod("GET");//设置请求方式
            connection.setRequestProperty("Accept", "application/json");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setRequestProperty("authorization",authorization);//按照对方要求设置的相关认证内容
            connection.connect();
            Gson gson=new GsonBuilder().create();//这里使用到了google 的Gson.jar 可以方便地把对象和json格式互转
            InputStream is = connection.getInputStream();
            InputStreamReader r=new InputStreamReader(is,"utf-8");
            BufferedReader br=new BufferedReader(r);
            String s = br.readLine();//这里偷懒直接读了一个完整的字符串,因为返回的json实际上也是一个完整的行字符串
            data = gson.fromJson(s, BackData.class);        //最后关闭流
            br.close();
            r.close();
            is.close();
            connection.disconnect();//断开连接
        } catch (MalformedURLException e) { //以下异常具体情况具体处理
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }

以上基本上就是获取数据并且转换成实体类的一个小流程

下面就是对实体类构建、param参数的说明

实体类:

对方给出的查询条件:

q={
"devChnId": "[email protected]$1$0$0",
"startDate": "2015-12-11 17:01:10",
"endDate ":"2015-12-12 17:01:10"
}

我构建的查询参数实体类如下:

public class SearchParam {
    private String devChnId;
    private String startDate;
    private String endDate;

    public String getDevChnId() {
        return devChnId;
    }
    public void setDevChnId(String devChnId) {
        this.devChnId = devChnId;
    }
    public String getStartDate() {
        return startDate;
    }
    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }
    public String getEndDate() {
        return endDate;
    }
    public void setEndDate(String endDate) {
        this.endDate = endDate;
    }
    @Override
    public String toString() {
        String str="";
        try {
            str=URLEncoder.encode("{\"devChnId\":\""+devChnId+"\",\"startDate\":\""+startDate+"\",\"endDate\":\""+endDate+"\"}", "UTF-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "q="+str;
    }

}

上述实体类代码中toString方法的重写就是对param参数的一些特殊设置

在字符串中 “ 需要用\"转义,具体需要转义的符号可以查询<a href="http://blog.csdn.net/lanchengxiaoxiao/article/details/41893925">相关资料</a>

我这里的写法其实比较傻的,也可以说是比较原始的,之前提到的Gson可以把实体类构建成json格式的

用到Gson可以采用以下这种写法,Gson构建的类实际上输出就是一个String字符串

public String toString(){
        return new GsonBuilder().create().toJson(this);
    }//以下是测试返回结果{"devChnId":"#[email protected]","startDate":"2011-12-15 12:23:43","endDate":"2016-12-12 12:02:24"}

但是这样只是获得了json格式的参数,在进行get方式进行请求的时候,直接这样的话会返回400错误,这是因为url参数中可能有一些识别不了的字符

所以需要使用URLEncoder.encode()进行url编码,但是前缀“q="不需要进行编码,以防识别不出是get方式的参数

时间: 2024-12-12 06:39:20

java开发之路2016.12.26的相关文章

物联网的全栈开发之路

本文由嵌入式企鹅圈原创团队成员-华南师范大学物联网创新中心黄鑫执笔. 两年前我还一直专注在android系统定制领域的研究,对物联网关注比较少,尽管我个人对智能家居的概念和场景体验也比较熟悉.真正引起我注意的是有一次在车上,听到电视广播说打开蓝牙,用手机摇一摇就可以摇到红包,我就觉得这个场景很棒,然后就知道了ibeacon和微信摇一摇周边,知道了微信硬件平台和物联网的发展已经深入渗透到我们的生活了.尽管我觉得自己进入物联网不算早,但是考虑到传统电子行业都有升级到物联的需求,加上自身在嵌入式和AP

Java开发之I/O读取文件实例详解

在java开发或者android开发中,读取文件是不可避免的,以下对java开发中读取文件做了归纳和详解: 1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileN

高效Web前端开发之路:YUI 3.15 PDF扫描版

JavaScript是一种最初由Netscape的LiveScript发展而来的面向对象的Web脚本语言,被ECMA国际定义为国际化标准--ECMAScript.JavaScript具有使用局限性.在Web方面,其必须与各种DOM技术结合才能发挥作用.因此,一些具有开拓创新精神的开发者们便开发出了各种丰富的第三方框架,通过第三方的支持代码实现浏览器兼容性的统一.代码的简化以及功能的增强. <高效Web前端开发之路:YUI 3.15>作者便是在此背景下,以国外最优秀的JavaScript框架之一

Java开发之Mybatis框架

mybasits配置文件书写1.configer文件配置<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><

Java开发之File类

File类 File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹. File类保存文件或目录的各种元数据信息,包括文件名.文件长度.最后修改时间.是否可读.获取当前文件的路径名,判断指定文件是否存在.获得当前目录中的文件列表,创建.删除文件和目录等方法. [案例 ]创建一个文件 1 import java.io.*; 2 class hello{ 3 public static void main(String[] args) { 4 File f=new

入坑Java,开始Spring boot 的后端开发之路

换了工作,从游戏行业的大坑中走了出来,走向互联网的大世界.新的公司是电商方向,电商行业万变不离其宗,java,spring是最广泛的技术.当然也有过一些特立独行的,也做得很大,不过现在都基本切换到了这个方向. 我之前都没有写过java,最大的一个java工程还是在本科的时候用java写的象棋程序(其实还是网上下载然后修改的).所以现在要重新积累技术了. 新入门,有个小项目做了做. 首先用Spring boot 框架快速构建一个restful 服务. 然后利用dobbo的RPC框架进行微服务的互相

Java开发之JSP指令

一.page指令 page指令是最常用的指令,用来说明JSP页面的属性等.JSP指令的多个属性可以写在一个page指令里,也可以写在多个指令里.但需要注意的是,无论在哪个page指令里的属性,任何page允许的属性都只能出现一次,否则会出现编译错误.import属性除外,可以出现多次.属性名称区分大小写. page指令的常见属性 属性名称 取值范围 描述 language java 指明解释该JSP文件时采用的语言.一般为Java语言.默认为Java. extends 任何类的全名 指明编译该J

Java开发之@PostConstruct和@PreConstruct注解

从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct.这两个注解被用来修饰一个非静态的void()方法.而且这个方法不能有抛出异常声明. 使用方式,例如: 1 @PostConstruct //方式1 2 public void someMethod(){ 3 ... 4 } 5 6 public @PostConstruct void someMethod(){ //方式2 7 .

Java开发之JSP行为

一.Java Bean行文 1.重点说明 Java Bean行为是一组与Java Bean相关的行为,包括useBean行为.setProperty行为.getProperty行为等.Java Bean就是普通的Java类.Java Bean类非常简单,只有私有属性与对应的getter方法和setter方法.(注意:对于boolean类型的属性,习惯上一般把getter方法写成isXxx(),而不是getXxx()) useBean行为属性     属性名          取值范围 描述 id