resttemplate 请求返回值为范型

public BaseResult<AAA> test(){
    Page page = new Page();
    page.setPageNo(1);
    page.setPageSize(10);
    HttpEntity httpEntity = new HttpEntity(page);
    ParameterizedTypeReference<BaseResult<AAA>> typeRef = new ParameterizedTypeReference<BaseResult<AAA>>() {};
    String url = "url";
    BaseResult<AAA> result = restTemplate.exchange(url, HttpMethod.POST, httpEntity, typeRef).getBody();
    return result;
}

 

    public BaseResult<AAA> test1(){
        Page page = new Page();
        page.setPageNo(1);
        page.setPageSize(10);
        String url = "url";
        String result = restTemplate.postForEntity (url,  page, String.class).getBody();
        BaseResult<AAA> placeTypeBaseResult = new Gson().fromJson(result, new TypeToken<BaseResult<AAA>>() {}.getType());
        return placeTypeBaseResult;
    } 


package com.example.demo.dto;

/**
 * @author 
 * @description TODO
 * @date 2019/3/12
 */
public class BaseResult<T> {

    private int resultCode;
    private BaseResultData<T> data;

    public int getResultCode() {
        return resultCode;
    }

    public void setResultCode(int resultCode) {
        this.resultCode = resultCode;
    }

    public BaseResultData<T> getData() {
        return data;
    }

    public void setData(BaseResultData<T> data) {
        this.data = data;
    }
}
package com.example.demo.dto;

import java.util.List;

/**
 * @author 
 * @description TODO
 * @date 2019/3/12
 */
public class BaseResultData<T> {
    private int pageNo;
    private int pageSize;
    private int totalPage;
    private int total;
    private List<T> rows;

    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public List<T> getRows() {
        return rows;
    }

    public void setRows(List<T> rows) {
        this.rows = rows;
    }
}

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一个简单的范例。首先,你需要在`Cargo.toml`文件中添加`mysql` crate,然后在你的代码中导入这个 crate。 ```rust use mysql::{ params, prelude::Queryable, Pool, PooledConn, Row, Transaction, }; // 定义一个连接池结构体 pub struct MysqlPool { pool: Pool, } impl MysqlPool { // 初始化连接池 pub fn new(url: &str) -> Option<Self> { match Pool::new(url) { Ok(pool) => Some(MysqlPool { pool }), Err(_) => None, } } // 从连接池中获取一个连接 pub fn get_conn(&self) -> Option<PooledConn> { match self.pool.get_conn() { Ok(conn) => Some(conn), Err(_) => None, } } } // 定义一个查询结果结构体 pub struct QueryResult<T> { pub rows: Vec<T>, } // 定义一个查询 trait pub trait Query<T> { fn query(&self, sql: &str) -> Option<QueryResult<T>>; } // 实现查询 trait impl<T: Row> Query<T> for PooledConn { fn query(&self, sql: &str) -> Option<QueryResult<T>> { match self.query_iter(sql) { Ok(result) => { let rows: Vec<T> = result.map(|x| x.unwrap()).collect(); Some(QueryResult { rows }) } Err(_) => None, } } } // 测试代码 fn main() { let url = "mysql://user:password@localhost:3306/test"; let pool = MysqlPool::new(url).unwrap(); let conn = pool.get_conn().unwrap(); let sql = "SELECT * FROM test_table WHERE id > ?;"; let result: QueryResult<(i32, String)> = conn .exec_iter(sql, params![1]) .unwrap() .map(|row| { let (id, name) = mysql::from_row(row.unwrap()); (id, name) }) .collect(); for row in result.rows { println!("id: {}, name: {}", row.0, row.1); } } ``` 在上面的代码中,我们首先定义了一个`MysqlPool`结构体作为连接池,然后定义了一个`QueryResult`结构体作为查询结果,它包含了一个泛型`T`表示查询结果的每一行数据类型。接着,我们定义了一个`Query` trait,它包含了一个泛型`T`表示查询结果的每一行数据类型,和一个`query`方法用于执行查询语句。最后,我们实现了`Query` trait,为`PooledConn`类型添加了`query`方法。在测试代码中,我们创建了一个连接池,从连接池中获取一个连接,然后执行了一个查询语句,并将结果存储在`QueryResult`结构体中,最后遍历查询结果并打印每一行数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值