Rest服务实现返回List<Map>结果
来源:互联网 发布:网络教育本科能考研吗 编辑:程序博客网 时间:2024/06/15 13:25
实例代码功能说明:通过客户端提交的sql语句,调用Rest服务完成查询,返回List<Map<String, Object>>格式的查询结果
服务端代码:
import java.net.URLDecoder;import java.util.List;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.Produces;import javax.ws.rs.core.*;@Produces({ MediaType.APPLICATION_JSON })@Path("query")public class QueryService {@GET@Path("sql/{param}")public List<java.util.Map<String, Object>> query(@PathParam("param") String sql) {System.out.println(sql);return JdbcUtils.getInstance().query(URLDecoder.decode(sql));}}
客户端说明:
(1)采用标准jdk接口发起请求
(2)使用jackson方式将结果为json格式的数据解析为List<Map>结构,注意避免jackson包与spring自带jackson包的冲突
(3)需要对传入的sql语句进行url编码
(4)需要进行乱码处理
客户端代码:
public class RESTNetClient {private static String targetURL = "http://localhost:8080/Sub1/services/query/sql/";public static void main(String[] args) {javaNetClient();}public static void javaNetClient() {String sql = "select * from stu where stu.stu_sex='男'";try {// 处理sql中带中文时的乱码问题URL restServiceURL = new URL(targetURL+ URLEncoder.encode(sql, "UTF-8"));HttpURLConnection httpConnection = (HttpURLConnection) restServiceURL.openConnection();httpConnection.setRequestMethod("GET");// 处理返回json数据中带中文时的乱码问题httpConnection.setRequestProperty("Accept-Charset", "UTF-8");httpConnection.setRequestProperty("contentType", "UTF-8");if (httpConnection.getResponseCode() != 200) {throw new RuntimeException("HTTP GET Request Failed with Error code : "+ httpConnection.getResponseCode());}BufferedReader responseBuffer = new BufferedReader(new InputStreamReader((httpConnection.getInputStream()),"utf-8"));StringBuilder result = new StringBuilder();String output;System.out.println("Output from Server: \n");while ((output = responseBuffer.readLine()) != null) {result.append(output);}System.out.println(result);List<Map<String, Object>> lm = listKeyMaps2(result.toString());print(lm);httpConnection.disconnect();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}// jackson解析@SuppressWarnings("unchecked")public static List<Map<String, Object>> listKeyMaps2(String jsonString) {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();ObjectMapper objectMapper = new ObjectMapper();try {list = objectMapper.readValue(jsonString, List.class);} catch (JsonParseException e) {e.printStackTrace();} catch (JsonMappingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return list;}}
说明:
(1)Rest方式提供的webservice比SOAP方式(如JAX-WS)在处理复杂对象序列化时更好用,如果用JAX-WS,还需要在服务端编写相应的XmlAdapter;同时,Rest服务在客户端调用时只需提供url访问连接,可以更方便地实现动态调用(即在不知道要调用的具体服务时,通过传入url完成调用)
(2)如果用Gson进行json解析,会出现将数字自动转换成小数的情况,暂时还未解决,所以采用了jackson,而且jackson性能更好
(3)客户端也可以采用spring提供的RestTemplate发起请求,有时间可以尝试下
1 0
- Rest服务实现返回List<Map>结果
- Hibernate createSQLQuery list 返回结果转成Map的方法
- ibatIS中返回结果map 并使用list获取
- mybatis学习之查询结果返回List以及Map
- 代码实现:MyBatis查询,返回值Map或List<Map>
- mybatis返回List<Map>
- mybatis返回list<Map>
- mybatis返回List<Map>
- WCF实现REST服务
- Mybatis 查询结果返回 Map
- mybatis返回Map结果集
- 如何在不定义VO的情况下返回带map的list结果集
- Hibernate学习记录四(Hibernate执行sql返回List<Map>类型结果集)
- Hibernate 返回结果list对象
- 访问dubbo的rest服务返回404
- xml解析返回list<map>
- Mybatis如何返回Map而不是List<Map>
- mybatis返回map实现
- springmvc restful风格支持
- 关于盒子定位
- android开发游记:使用sharepreference存储复杂对象的解决方案
- linux中的find命令——查找文件名
- substr字符串截取时出现乱码
- Rest服务实现返回List<Map>结果
- MySQL忘记密码怎么办?
- spring AOP 注解
- 树莓派源代码安装opencv
- JS通过get、post向jsp传递中文出现乱码的问题的解决
- SDL入门教程(四):2、SDL动画的硬件渲染(Hardware Render)
- 大数据视频学习目录
- Robot Framework自动化测试修炼宝典——互动出版网
- Android性能优化典范C2