依賴:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
工具類(直接上代碼):
package com.itheima.common.util;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.beanutils.PropertyUtils;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
/**
* 。
* (1) 使用泛型方法:把json字符串轉(zhuǎn)換為相應(yīng)的JavaBean對(duì)象;
* 轉(zhuǎn)換為普通JavaBean:readValue(json,Student.class);
* (2) List Map轉(zhuǎn)換List 對(duì)象:如List<Student>,將第二個(gè)參數(shù)傳遞為Student;
* (3) List 對(duì)象轉(zhuǎn)換List Map:
* [].class.然后使用Arrays.asList();方法把得到的數(shù)組轉(zhuǎn)換為特定類型的List;
*
* @param jsonStr
* @param valueType
* @return
*
*/
public final class JsonUtils {
private static ObjectMapper objectMapper;
/**
* (1) 使用泛型方法:把json字符串轉(zhuǎn)換為相應(yīng)的JavaBean對(duì)象;
* 轉(zhuǎn)換為普通JavaBean:readValue(json,Student.class);
*/
public static <T> T readValue(String jsonStr, Class<T> valueType) throws Exception {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
}
return objectMapper.readValue(jsonStr, valueType);
}
/**
*(2).List Map轉(zhuǎn)換List 對(duì)象:如List<Student>,將第二個(gè)參數(shù)傳遞為Student對(duì)象;
* map轉(zhuǎn)換為bean
*/
public static Object mapToObject(Map<String, String> map, Class<?> beanClass) throws Exception {
if (map == null)
return null;
Object obj = beanClass.newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
Method setter = property.getWriteMethod();
if (setter != null) {
setter.invoke(obj, map.get(property.getName()));
}
}
return obj;
}
/**
*(3).List 對(duì)象轉(zhuǎn)換List Map:
* [].class.然后使用Arrays.asList();方法把得到的數(shù)組轉(zhuǎn)換為特定類型的List;
* bean轉(zhuǎn)換為map
*/
public static <T> List<Map<String, Object>> listConvert(List<T> list){
List<Map<String, Object>> list_map = new ArrayList<Map<String, Object>>();
if (CollectionUtils.isNotEmpty(list)) {
list.forEach(item ->{
Map<String, Object> map = null;
try {
map = PropertyUtils.describe(item);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
list_map.add(map);
});
}
return list_map;
}
}
使用場(chǎng)景:
(1).使用泛型方法:把json字符串轉(zhuǎn)換為相應(yīng)的JavaBean對(duì)象 ;
一般用于:Controller層:
例如:
/**
* 保存:表單數(shù)據(jù)(保存和修改功能)
* 權(quán)限-管理員&專員
*
* @param param
* @return
*/
@PostMapping(value = "/saveFormData")
@AuthInterceptor("mag:XXlist:saveFormData")
public Result saveFormData(HttpServletRequest request,@RequestBody String param) {
try {
Map<String, Object> paramMap = JsonUtils.readValue(param, Map.class);
String refreshToken = request.getHeader("refreshToken");
Map<String, Object> current= tokenCache.getCurrentUsers(refreshToken);
paramMap.put("createdNo",current.get("pmNo"));
paramMap.put("createdBy",current.get("pmName"));
return ListService.saveFormData(paramMap);
} catch (Exception e) {
log.error("XXController saveFormData is error===:" + e.getMessage(), e);
return Result.failure("表單數(shù)據(jù)保存失敗!");
}
}
(2).List Map轉(zhuǎn)換List 對(duì)象:如List,將第二個(gè)參數(shù)傳遞為Student對(duì)象;文章來源:http://www.zghlxwxcb.cn/news/detail-528037.html
public Result addTask(@RequestBody String param) {
try {
List<Map<String, String>> params = JsonUtils.readValue(param, List.class);
//map轉(zhuǎn)化為對(duì)象
StudentVo studentVo = (StudentVo)
JsonUtils.mapToObject(params.get(0), StudentVo.class);
//代碼省略......
return Result.success().result("任務(wù)添加成功");
} catch (Exception e) {
log.error("===XXController addTask is error===:" + e.getMessage(), e);
return Result.failure(e.getMessage());
}
}
(3).List 對(duì)象轉(zhuǎn)換List Map:文章來源地址http://www.zghlxwxcb.cn/news/detail-528037.html
private List<Map<String, Object>> getHeaderssData() {
QueryWrapper<ListFormTableVo> qw = new QueryWrapper<ListFormTableVo>();
qw.orderByAsc("id");
List<ListFormTableVo> list = ListFormTemplateMapper.selectList(qw);
//List對(duì)象轉(zhuǎn)化為L(zhǎng)ist Map
List<Map<String, Object>> res = JsonUtils.listConvert(list);
res = res.stream().filter(e -> (!e.get("headerField").equals("pmNo"))).
filter(e -> (!e.get("headerField").equals("pmName"))).
collect(Collectors.toList());
return res;
}
到了這里,關(guān)于<Java工具類>json字符串、List Map,List 對(duì)象轉(zhuǎn)換為相應(yīng)的JavaBean對(duì)象的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!