servlet实现restful接口,返回json报文

hushaod 发布于 2016/12/27 22:56
阅读 2K+
收藏 0

@英强 你好,想跟您请教个问题:

我看了您的summer-restful,仍不是很懂,我在程序里面试了一下,但是仍然没成功,想请您帮忙指导一下:

我现在想要在浏览器地址栏输入:http://localhost:8080/LBS/locationjson,想要通过servlet的doGet方法以RESTful接口返回json格式的数据,具体该怎么操作呢?

@RestSupport("/locationjson")
public class LocationGet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public LocationGet() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String url = "jdbc:postgresql://localhost:5432/demo";
        String username = "postgres";
        String pwd = "abcdefg";
        System.out.println(pwd);
        response.setContentType("text/html;charset=UTF-8");        
        try {
            Class.forName("org.postgresql.Driver");
            Connection conn = DriverManager.getConnection(url,username,pwd);
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("SELECT name, ST_AsText(location) FROM global_points limit 200;");
            String str[] = new String[200];
            int num = 0;
            while (rs.next()) {
                str[num] = rs.getString("st_astext");
                num++;                
            }
            rs.close();
            st.close();
            conn.close();

   //到这里怎么来封装实现?

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }
}


 经测试,连接数据库能够正常读取数据。我还按照您的例子,创建了web.xml,写入了这些内容:

<filter>
        <filter-name>RestFilter</filter-name>
        <filter-class>com.servlet.rest.RestFilter</filter-class>
        <init-param>
            <param-name>scanPackage</param-name>
            <param-value>com.servlet.lbs</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>RestFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


PS:这是我的毕业设计,时间比较紧急,这两天就得出结果,还望您能抽出宝贵时间知道一下,感激不尽

加载中
0
Fedo
Fedo

既然你的数据库能够正常读取数据。你应该是不知道怎么将str[]数组转成json返回吧

String jsonStr = "";

 while (rs.next()) {
       str[num] = rs.getString("st_astext");

       //在这里按照你需要的结构组装json串 或者封装到对象然后最后用fastjson之类的json类库转换成json字符串返回

       jsonStr += "xxxxxxx";
       num++;                
 }

response.getWriter().write(jsonStr);

如果是毕业设计 建议使用fastjson或其他json类库转换的方式 这样比你直接拼json字符串方便且不易出错 具体用法一搜一大把

h
hushaod
多谢,已经解决了。就是直接输出json格式的字符串,然后在前端再用javascript函数将json字符串转化为json数据,接着就可以直接解析了。
0
啡色地带
啡色地带
response.getWriter.write(jsonData), 从结果集中构造json数据, 或者构造一个List<dataObject>, 然后使用json库序列化
h
hushaod
多谢,已经解决。就是直接输出json格式的字符串,然后在前端再用javascript函数将json字符串转化为json数据,接着就可以直接解析了。
0
英强
英强

不好意思,才看到。上面两位都说的对。你现在的问题是不知道怎么输出json数据吧?首先,可以用一些json类库来将对象转为json格式的数据,比如用fastjson 。然后就是输出:

response.setContentType("application/json;charset=utf-8");
response.getWriter().print(jsonObject.toJSONString());

h
hushaod
多谢,已经解决。就是直接输出json格式的字符串,然后在前端再用javascript函数将json字符串转化为json数据,这样就可以直接解析了。
返回顶部
顶部