springboot2.2.2企業級項目整合redis與redis 工具類大全

1.springboot2.2.2整合redis教程不少,爲此編寫了比較完整的redis工具類,符合企業級開發使用的工具類

2.springboot與redis maven相關的依賴

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> <!--redis依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

3.application.yml中加入redis相關的配置

server: port: 8080 servlet: context-path: /project/v101 session: timeout: 3600s tomcat: uri-encoding: utf-8 spring: # 對象屬性值,爲 null,則不顯示屬性名 jackson: default-property-inclusion: non_null datasource: name: demo driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=GMT%2B8 # driver-class-name: com.mysql.jdbc.Driver username: root password: root type: com.alibaba.druid.pool.DruidDataSource druid: initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 # 配置間隔多久才進行一次檢測,檢測須要關閉的空閒鏈接,單位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一個鏈接在池中最小生存的時間,單位是毫秒 minEvictableIdleTimeMillis: 30000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置監控統計攔截的filters,去掉後監控界面sql沒法統計,'wall'用於防火牆 filters: stat,wall,log4j # 經過connectProperties屬性來打開mergeSql功能;慢SQL記錄 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 自定義屬性,用於druid監控界面的帳號、密碼配置 servlet: username: root password: root http: log-request-details: true servlet: multipart: max-file-size: 20MB max-request-size: 30MB file-size-threshold: 0 enabled: true  # redis配置 redis: host: localhost port: 6379 password: 123456 database: 0 mybatis-plus: global-config: db-config: logic-delete-value: 1 # 邏輯已刪除值(默認爲 0) logic-not-delete-value: 0 # 邏輯未刪除值(默認爲 1) mapper-locations: classpath:mapper/**/*Mapper.xml # config-location: classpath:mybatis-config.xml # MyBaits 別名包掃描路徑,經過該屬性能夠給包中的類註冊別名 type-aliases-package: com.houtang.saas.pms.domain.entity configuration: # 開啓駝峯匹配 map-underscore-to-camel-case: true # 這個配置使全局的映射器啓用或禁用緩存。系統默認值是true cache-enabled: true # 全局啓用或禁用延遲加載。當禁用時,全部關聯對象都會即時加載。系統默認值是true lazy-loading-enabled: true # 容許或不容許多種結果集從一個單獨的語句中返回(須要適合的驅動)。系統默認值是true multiple-result-sets-enabled: true # 使用列標籤代替列名。不一樣的驅動在這方便表現不一樣。參考驅動文檔或充分測試兩種方法來決定所使用的驅動 use-column-label: true # 容許 JDBC 支持生成的鍵。須要適合的驅動。若是設置爲 true 則這個設置強制生成的鍵被使用,儘管一些驅動拒絕兼容但仍然有效(好比Derby) use-generated-keys: false # 配置默認的執行器。SIMPLE 執行器沒有什麼特別之處。REUSE 執行器重用預處理語句。BATCH 執行器重用語句和批量更新 default-executor-type: simple # 設置超時時間,它決定驅動等待一個數據庫響應的時間 default-statement-timeout: 25000 pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true params: count=countSql

4.編寫自定義redis配置類(因爲springboot 整合的redisTemplate<Object,Object> 只能操做Object對象,經過源碼能夠看出,SpringBoot自動幫咱們在容器中生成了一個RedisTemplate和一個StringRedisTemplate,使用時須要寫不少類型轉換代碼,用起來不切實際需求)

/** * redis配置類
* *
@author : ywb * @createdDate : 2019/12/31 * @updatedDate */ @Configuration public class RedisConfig { /** * 自定義 redisTemplate<String, Object> * * @param redisConnectionFactory * @return */ @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); // 不轉換值爲 null 的對象 // om.setSerializationInclusion(JsonInclude.Include.NON_NULL); Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); jackson2JsonRedisSerializer.setObjectMapper(om); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // key 採用 string 的序列化方式 template.setKeySerializer(stringRedisSerializer); // value 採用 jackson 的序列化方式 template.setValueSerializer(jackson2JsonRedisSerializer); // hash 的 key 採用 string 的序列化方式 template.setHashKeySerializer(stringRedisSerializer); // hash 的 value 採用 jackson 的序列化方式 template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; }

5.攔截器使用實例(攔截請求時,獲取redis中的token信息,對redis中指定鍵對應的數據設置失效時間

/** * 請求攔截器 * @author : ywb * @createdDate : 2019/12/31 * @updatedDate */ @Component public class RequestInterceptor implements HandlerInterceptor { private static Log LOGGER = LogFactory.getLog(RequestInterceptor.class); @Autowired private RedisUtils redisUtils; /** * 請求以前執行 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //獲取token String token = request.getHeader("token"); DataCheck.isTrue(StringUtils.isBlank(token), ResultMessage.NO_TOKEN.getMsg()); // String timestamp = request.getHeader("timestamp"); // //獲取生成的隨機數 // String random = request.getHeader("random"); // //獲取加密後的簽名信息 // String sign = request.getHeader("sign"); // //組合token+timestamp+random //// String pwd = token.concat(timestamp).concat(random); // //SHA-256哈希加密算法 // String pwd = token; // MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); // byte[] hash = messageDigest.digest(pwd.getBytes("UTF-8")); // //經過SHA-256哈希加密算法生成簽名信息 // String newSign = Hex.encodeHexString(hash); //查詢redis存儲的用戶信息 String redisUser = Constant.REDIS_USERID.replace("@uuid", token); if (!StringUtils.isBlank(redisUser) && redisUtils.exists(redisUser)) { //更新登陸有效時間(續命)  redisUtils.expire(redisUser, Constant.REDIS_USERID_TIMEOUT); return true; } else { throw new DataValidationException(ResultMessage.REQUEST_ERROR.getMsg()); } } /** * 請求以後生成視圖以前執行 * @param request * @param response * @param handler * @param modelAndView * @throws Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** * 最後執行,通常用於釋放資源 * @param request * @param response * @param handler * @param ex * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }

6.編寫比較完整的redis工具類RedisUtils

/** * Redis工具類<br> * <b>使用方法:</b>直接在類中使用@Autowired方法注入便可 * @author : ywb * @createdDate : 2019/12/31 * @updatedDate */ @Slf4j @Component public final class RedisUtils { /** * 從 spring 容器中注入自定義的 redisTemplate */ @Autowired private RedisTemplate<String, Object> redisTemplate; /** * 對 redis 中指定鍵對應的數據設置失效時間 * * @param key 鍵 * @param time 時間(秒),time要大於0 * @return */ public boolean expire(String key, long time) { boolean result = false; try { if (StringUtils.isNotBlank(key) && time > 0) { result = this.redisTemplate.expire(key, time, TimeUnit.SECONDS); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } return result; } /** * 從 redis 中根據指定的 key 獲取已設置的過時時間 * * @param key 鍵,不能爲null * @return 時間(秒),返回0表明爲永久有效 */ public long getExpire(String key) { long time = 0L; try { if (StringUtils.isNotBlank(key)) { time = this.redisTemplate.getExpire(key, TimeUnit.SECONDS); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } return time; } /** * 判斷 redis 中是否存在指定的 key * * @param key 鍵,不能爲null * @return true表示存在,false表示不存在 */ public boolean exists(String key) { boolean result = false; try { if (StringUtils.isNotBlank(key)) { result = this.redisTemplate.hasKey(key); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } return result; } /** * 從 redis 中移除指定 key 對應的數據 * * @param keys 能夠傳一個值或多個 */ @SuppressWarnings("unchecked") public long remove(String... keys) { long count = 0L; if (keys != null && keys.length > 0) { if (keys.length == 1) { boolean result = this.redisTemplate.delete(keys[0]); if (result) { count = keys.length; } } else { count = this.redisTemplate.delete(CollectionUtils.arrayToList(keys)); } } return count; } // ============================ String ============================= /** * 從 redis 中獲取指定 key 對應的 string 數據 * * @param key 鍵,不能爲null * @return key 對應的字符串數據 */ public <T> T get(String key) { T t = null; try { if (StringUtils.isNotBlank(key)) { t = (T) this.redisTemplate.opsForValue().get(key); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } return t; } /** * 從 redis 中獲取指定 key 對應的 string 數據,並轉換爲 T 類型 * * @param key 鍵,不能爲null * @param clazz 類型,從 redis 獲取後的對象直接轉換爲 T 類型 * @return key 對應的數據 */ public <T> T get(String key, Class<T> clazz) { T t = null; try { if (StringUtils.isNotBlank(key)) { String str = (String) this.redisTemplate.opsForValue().get(key); t = this.stringToBean(str, clazz); } } catch (Exception ex) { log.error(ex.getMessage(), ex); return null; } return t; } /** * 判斷 redis 中指定 key 的數據對應偏移位置的 bit 位是否爲 1 * * @param key 鍵,不能爲null * @param offset 偏移位置 * @return true表示存在,false表示不存在 */ public boolean getBit(String key, long offset) { boolean result = false; try { if (StringUtils.isNotBlank(key)) { result = this.redisTemplate.opsForValue().getBit(key, offset); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } return result; } /** * 將指定的 key, value 放到 redis 中 * * @param key 鍵,不能爲null * @param value 值,不能爲null * @return true表示成功,false表示失敗 */ public <T> boolean set(String key, T value) { boolean result = false; try { if (StringUtils.isNotBlank(key)) { this.redisTemplate.opsForValue().set(key, value); result = true; } } catch (Exception ex) { log.error(ex.getMessage(), ex); } return result; } /** * 將指定的 key, value 放到 redis 中,並設置過時時間 * * @param key 鍵,不能爲null * @param value 值,不能爲null * @param time 時間(秒),time要大於0,若是time小於等於0,將設置無限期 * @return true表示成功,false表示失敗 */ public <T> boolean set(String key, T value, long time) { try { if (time > 0) { this.redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); } else { this.set(key, value); } return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 將 redis 中指定 key 對應數據的偏移位置的 bit 位設置爲 0/1 * * @param key 鍵,不能爲null * @param offset 偏移位置 * @param flag true表示設置爲1,false表示設置爲0 * @return true表示成功,false表示失敗 */ public boolean setBit(String key, long offset, boolean flag) { boolean result = false; try { if (StringUtils.isNotBlank(key)) { this.redisTemplate.opsForValue().setBit(key, offset, flag); result = true; } } catch (Exception ex) { log.error(ex.getMessage(), ex); } return result; } /** * 對 redis 中指定 key 的數據遞增,並返回遞增後的值 * * @param key 鍵,不能爲null * @param delta 要增長几(大於0) * @return */ public long incr(String key, long delta) { if (delta < 0) { throw new RuntimeException("遞增因子必須大於0。"); } return this.redisTemplate.opsForValue().increment(key, delta); } /** * 對 redis 中指定 key 的數據遞減,並返回遞減後的值 * * @param key 鍵,不能爲null * @param delta 要減小几(大於0) * @return */ public long decr(String key, long delta) { if (delta < 0) { throw new RuntimeException("遞減因子必須大於0。"); } return this.redisTemplate.opsForValue().decrement(key, delta); } // ================================ hashmap================================= /** * 判斷 redis 中指定 key 對應的 hash 表中是否有 hashKey * * @param key 鍵,不能爲null * @param hashKey hash表中的鍵,不能爲null * @return true表示存在,false表示不存在 */ public boolean hexists(String key, String hashKey) { return this.redisTemplate.opsForHash().hasKey(key, hashKey); } /** * 從 redis 中獲取指定 key 對應的 hash 表中的指定 hashKey 所對應的值 * * @param key 鍵,不能爲null * @param hashKey hash表中的鍵,不能爲null * @return*/ @SuppressWarnings("unchecked") public <T> T hget(String key, String hashKey) { return (T) this.redisTemplate.opsForHash().get(key, hashKey); } /** * 向 redis 中指定 key 對應的 hash 表(若是 hash 表不存在則自動建立)中放入 hashKey,value 數據 * * @param key 鍵,不能爲null * @param hashKey hash表中的鍵,不能爲null * @param value 值,不能爲null * @return true表示成功,false表示失敗 */ public <T> boolean hset(String key, String hashKey, T value) { try { this.redisTemplate.opsForHash().put(key, hashKey, value); return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 向 redis 中指定 key 對應的 hash 表(若是 hash 表不存在則自動建立)中放入 hashKey,value 數據,並設置過時時間 * * @param key 鍵,不能爲null * @param hashKey hash表中的鍵,不能爲null * @param value 值,不能爲null * @param time 過時時間(秒),注意:若是已存在的hash表有時間,這裏將會替換原有的時間 * @return true表示成功,false表示失敗 */ public <T> boolean hset(String key, String hashKey, T value, long time) { try { this.redisTemplate.opsForHash().put(key, hashKey, value); if (time > 0) { this.expire(key, time); } return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 刪除 redis 中指定 key 對應的 hash 表中等於 hashKeys 的數據 * * @param key 鍵,不能爲null * @param hashKeys hash表中的鍵,可使多個,不能爲null */ public <T> void hdel(String key, T... hashKeys) { this.redisTemplate.opsForHash().delete(key, hashKeys); } /** * 從 redis 中獲取指定 key 對應的 hash 表,並返回相應的 map 對象 * * @param key 鍵,不能爲null * @return map對象,包含全部的鍵值對 */ public Map<?, ?> hmget(String key) { return this.redisTemplate.opsForHash().entries(key); } /** * 向 redis 中放入指定 key,並設置對應的數據類型爲 map * * @param key 鍵,不能爲null * @param map 多個鍵值對應的map,不能爲null * @return true表示成功,false表示失敗 */ public boolean hmset(String key, Map<String, ?> map) { try { this.redisTemplate.opsForHash().putAll(key, map); return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 向 redis 中放入指定 key,並設置對應的數據類型爲 map 以及過時時間 * * @param key 鍵,不能爲null * @param map 對應多個鍵值,不能爲null * @param time 時間(秒),time要大於0,若是time小於等於0,將設置無限期 * @return true表示成功,false表示失敗 */ public boolean hmset(String key, Map<String, ?> map, long time) { try { this.redisTemplate.opsForHash().putAll(key, map); if (time > 0) { this.expire(key, time); } return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 對 redis 中指定 key 對應的 hash 表(若是 hash 表不存在則自動建立)遞增,並返回新增後的值 * * @param key 鍵,不能爲null * @param item 項,不能爲null * @param delta 要增長几(大於0) * @return 新增後的值 */ public double hincr(String key, String item, double delta) { if (delta < 0) { throw new RuntimeException("遞增因子必須大於0。"); } return this.redisTemplate.opsForHash().increment(key, item, delta); } /** * 對 redis 中指定 key 對應的 hash 表(若是 hash 表不存在則自動建立)遞增,並返回新增後的值 * * @param key 鍵,不能爲null * @param item 項,不能爲null * @param delta 要減小几(大於0) * @return */ public double hdecr(String key, String item, double delta) { if (delta < 0) { throw new RuntimeException("遞增因子必須大於0。"); } return this.redisTemplate.opsForHash().increment(key, item, -delta); } /** * 從 redis 中移除指定 key 對應 hash 表中鍵爲 values 的數據 * * @param key 鍵,不能爲null * @param values 值,不能爲null * @return 移除的個數 */ public <T> long hremove(String key, T... values) { try { Long count = this.redisTemplate.opsForHash().delete(key, values); return count; } catch (Exception ex) { log.error(ex.getMessage(), ex); return 0; } } // ============================set============================= /** * 判斷 redis 中是否存在指定 key 對應的 set 對象 * * @param key 鍵,不能爲null * @param value 值,不能爲null * @return true表示存在,false表示不存在 */ public <T> boolean sexists(String key, T value) { try { return this.redisTemplate.opsForSet().isMember(key, value); } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 從 redis 中根據指定 key 對應的值,並返回 set 對象 * * @param key 鍵,不能爲null * @return */ public Set<?> sget(String key) { try { return this.redisTemplate.opsForSet().members(key); } catch (Exception ex) { log.error(ex.getMessage(), ex); return null; } } /** * 向 redis 中放入指定 key 和數據,並設置其數據類型爲 set * * @param key 鍵,不能爲null * @param values 值,不能爲null * @return 成功個數 */ public <T> long sset(String key, T... values) { try { return this.redisTemplate.opsForSet().add(key, values); } catch (Exception ex) { log.error(ex.getMessage(), ex); return 0; } } /** * 向 redis 中放入指定 key 和數據,並設置其數據類型爲 set 以及過時時間 * * @param key 鍵,不能爲null * @param time 過時時間(秒),注意:若是已存在的hash表有時間,這裏將會替換原有的時間 * @param values 值,不能爲null * @return 成功個數 */ public <T> long sset(String key, long time, T... values) { try { Long count = this.redisTemplate.opsForSet().add(key, values); if (time > 0) { expire(key, time); } return count; } catch (Exception ex) { log.error(ex.getMessage(), ex); return 0; } } /** * 獲取 redis 中指定 key 對應 set 的大小 * * @param key 鍵,不能爲null * @return */ public long ssize(String key) { try { return this.redisTemplate.opsForSet().size(key); } catch (Exception ex) { log.error(ex.getMessage(), ex); return 0; } } /** * 從 redis 中移除指定 key 對應 set 中鍵爲 values 的數據 * * @param key 鍵,不能爲null * @param values 值,不能爲null * @return 移除的個數 */ public <T> long sremove(String key, T... values) { try { Long count = this.redisTemplate.opsForSet().remove(key, values); return count; } catch (Exception ex) { log.error(ex.getMessage(), ex); return 0; } } // =============================== list ================================= /** * 從 redis 中獲取指定 key 對應 list 的大小 * * @param key 鍵,不能爲null * @return */ public long lsize(String key) { try { return this.redisTemplate.opsForList().size(key); } catch (Exception ex) { log.error(ex.getMessage(), ex); return 0; } } /** * 從 redis 中獲取指定 key 對應 list 中 index 位置的值 * * @param key 鍵,不能爲null * @param index 當index>=0時,0爲表頭,1爲第二個元素,依次類推;當index<0時,-1爲表尾,-2爲倒數第二個元素,依次類推 * @return */ @SuppressWarnings("unchecked") public <T> T lindex(String key, long index) { try { return (T) this.redisTemplate.opsForList().index(key, index); } catch (Exception ex) { log.error(ex.getMessage(), ex); return null; } } /** * 從 redis 中獲取指定 key 對應 list 指定範圍的值(start~end設置爲0~-1將返回全部值) * * @param key 鍵,不能爲null * @param start 起始位置,0表示起始位置 * @param end 結束位置,-1表示結束位置 * @return */ public List<?> lget(String key, long start, long end) { try { return this.redisTemplate.opsForList().range(key, start, end); } catch (Exception ex) { log.error(ex.getMessage(), ex); return null; } } /** * 向 redis 中放入指定 key,並設置數組類型爲 list,將 value 加入到 list 尾部 * * @param key 鍵,不能爲null * @param value 值,不能爲null * @return */ public <T> boolean lset(String key, T value) { try { this.redisTemplate.opsForList().rightPush(key, value); return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 向 redis 中放入指定 key,並設置數組類型爲 list,將 value 加入到 list 尾部,同時設置過時時間 * * @param key 鍵,不能爲null * @param value 值,不能爲null * @param time 時間(秒),time要大於0,若是time小於等於0,將設置無限期 * @return */ public <T> boolean lset(String key, T value, long time) { try { this.redisTemplate.opsForList().rightPush(key, value); if (time > 0) { this.expire(key, time); } return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 向 redis 中放入指定 key,並設置數組類型爲 list,並以 value 填入 list * * @param key 鍵,不能爲null * @param value 值,不能爲null * @return */ public boolean lset(String key, List<?> value) { try { this.redisTemplate.opsForList().rightPushAll(key, value); return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 向 redis 中放入指定 key,並設置數組類型爲 list,並以 value 填入 list,同時設置過時時間 * * @param key 鍵,不能爲null * @param value 值,不能爲null * @param time 時間(秒),time要大於0,若是time小於等於0,將設置無限期 * @return */ public boolean lset(String key, List<?> value, long time) { try { this.redisTemplate.opsForList().rightPushAll(key, value); if (time > 0) { this.expire(key, time); } return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 將 redis 中指定 key 對應的 list 數據中指定 index 位置的數據更新爲 value * * @param key 鍵,不能爲null * @param index 索引 * @param value 值,不能爲null * @return */ public <T> boolean lupdate(String key, long index, T value) { try { this.redisTemplate.opsForList().set(key, index, value); return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } } /** * 從 redis 中指定 key 對應的 list 中移除 n 個值爲 value 的數據 * * @param key 鍵,不能爲null * @param count 移除多少個 * @param value 值,不能爲null * @return 移除的個數 */ public <T> long lremove(String key, long count, T value) { try { Long remove = this.redisTemplate.opsForList().remove(key, count, value); return remove; } catch (Exception ex) { log.error(ex.getMessage(), ex); return 0; } } /** * 根據指定的類型轉換字符串/JSON字符串爲相應的對象 * * @param value 字符串/JSON字符串 * @param clazz 類型 * @param <T> 任意類型 * @return */ @SuppressWarnings("unchecked") public <T> T stringToBean(String value, Class<T> clazz) { if (value == null || value.length() <= 0 || clazz == null) { return null; } if (clazz == byte.class || clazz == Byte.class) { return (T) Byte.valueOf(value); } else if (clazz == int.class || clazz == Integer.class) { return (T) Integer.valueOf(value); } else if (clazz == long.class || clazz == Long.class) { return (T) Long.valueOf(value); } else if (clazz == double.class || clazz == Double.class) { return (T) Double.valueOf(value); } else if (clazz == float.class || clazz == Float.class) { return (T) Float.valueOf(value); } else if (clazz == String.class) { return (T) value; } else { return JSONUtil.toBean(value, clazz); } } /** * 將 bean 轉換爲字符串/JSON字符串 * * @param value 任意類型對象 * @return 字符串/JSON字符串 */ public <T> String beanToString(T value) { if (value == null) { return null; } Class<?> clazz = value.getClass(); if (clazz == byte.class || clazz == Byte.class) { return "" + value; } else if (clazz == int.class || clazz == Integer.class) { return "" + value; } else if (clazz == long.class || clazz == Long.class) { return "" + value; } else if (clazz == double.class || clazz == Double.class) { return "" + value; } else if (clazz == float.class || clazz == Float.class) { return "" + value; } else if (clazz == String.class) { return (String) value; } else { return JSONUtil.toJsonStr(value); } }
相關文章
相關標籤/搜索