spring boot+jpa分页查询(搜索)(Specification、Predicate)

上代码:
NeElement实体:

package com.sunwave.grouping.domain;

import javax.persistence.*;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
//import com.sunwave.common.alarm.AlmAlarmlog;
//import com.sunwave.common.alarm.AlmAlarmlogHistory;
//import com.sunwave.common.alarm.AlmAlarmlogMask;
//import com.sunwave.common.platform.NeCompany;


/**
 * @author lfw
 * @date   2020年8月3日
 * @time   下午6:44:54
 * 
 */
@Entity
@Table(name = "ne_element")
public class NeElement extends BaseRowModel implements Serializable{

	/**
	 * extends BaseRowModel
	 */
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long neNeid; //设备唯一标识
	@ExcelProperty(value="设备连接URL")
	private String coonReqUrl; //设备连接URL
	@ExcelProperty(value="设备序列号")
	private String serialNumber; //设备序列号
	@ExcelProperty(value="设备IP")
	private String deviceIp;  //设备IP
	@ExcelProperty(value="modelId")
	private String modelId;//modelName对应的id
	@ExcelProperty(value="描述")
	private String description;//描述
	@ExcelProperty(value="制造商")
	private String manufacturer;//制造商
	@ExcelProperty(value="软件版本")
	private String softwareVersion;//软件版本
	@ExcelProperty(value="创建时间")
	private Date creationTime;//创建时间
	@ExcelProperty(value="lastBootstrapTime")
	private Date lastBootstrapTime;
	@ExcelProperty(value="最后连接时间")
	private Date lastConnTime;//最后连接时间
	@ExcelProperty(value="更新时间")
	private Date updateTime;//更新时间
	@ExcelProperty(value="oui")
	private String oui;//oui
	@ExcelProperty(value="product")
	private String product;
	@ExcelProperty(value="是否需要认证")
	private Boolean authRequirement;//是否需要认证
	@ExcelProperty(value="dialectIP")
	private String dialectIP;
	@ExcelProperty(value="更新用户")
	private String updateUser;//更新用户
	@ExcelProperty(value="mac地址")
	private String macAddress;//mac地址
	@ExcelProperty(value="在线状态")
	private Integer onlineStatus;//在线状态
	@ExcelProperty(value="会话状态")
	private Integer sessionStatus;//会话状态
	@ExcelIgnore
    @ManyToMany(cascade=CascadeType.ALL, mappedBy = "elementList")
    @JsonIgnore
	private List<DeviceGroup> deviceGroupList=new ArrayList<DeviceGroup>();
   
   
	public List<DeviceGroup> getDeviceGroupList() {
	return deviceGroupList;
}
   public void setDeviceGroupList(List<DeviceGroup> deviceGroupList) {
	this.deviceGroupList = deviceGroupList;
}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String getManufacturer() {
		return manufacturer;
	}

	public void setManufacturer(String manufacturer) {
		this.manufacturer = manufacturer;
	}

	public String getSoftwareVersion() {
		return softwareVersion;
	}

	public void setSoftwareVersion(String softwareVersion) {
		this.softwareVersion = softwareVersion;
	}

	public Date getLastConnTime() {
		return lastConnTime;
	}

	public void setLastConnTime(Date lastConnTime) {
		this.lastConnTime = lastConnTime;
	}

	public String getModelId() {
		return modelId;
	}

	public void setModelId(String modelId) {
		this.modelId = modelId;
	}

	public Long getNeNeid() {
		return neNeid;
	}

	public void setNeNeid(Long neNeid) {
		this.neNeid = neNeid;
	}

	public String getCoonReqUrl() {
		return coonReqUrl;
	}

	public void setCoonReqUrl(String coonReqUrl) {
		this.coonReqUrl = coonReqUrl;
	}

	public String getDeviceIp() {
		return deviceIp;
	}

	public void setDeviceIp(String deviceIp) {
		this.deviceIp = deviceIp;
	}



	public String getSerialNumber() {
		return serialNumber;
	}

	public void setSerialNumber(String serialNumber) {
		this.serialNumber = serialNumber;
	}

	public Date getCreationTime() {
		return creationTime;
	}

	public void setCreationTime(Date creationTime) {
		this.creationTime = creationTime;
	}

	public Date getLastBootstrapTime() {
		return lastBootstrapTime;
	}

	public void setLastBootstrapTime(Date lastBootstrapTime) {
		this.lastBootstrapTime = lastBootstrapTime;
	}

	public Date getUpdateTime() {
		return updateTime;
	}

	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}

	public String getOui() {
		return oui;
	}

	public void setOui(String oui) {
		this.oui = oui;
	}

	public String getProduct() {
		return product;
	}

	public void setProduct(String product) {
		this.product = product;
	}

	public Boolean getAuthRequirement() {
		return authRequirement;
	}

	public void setAuthRequirement(Boolean authRequirement) {
		this.authRequirement = authRequirement;
	}

	public String getDialectIP() {
		return dialectIP;
	}

	public void setDialectIP(String dialectIP) {
		this.dialectIP = dialectIP;
	}

	public String getUpdateUser() {
		return updateUser;
	}

	public void setUpdateUser(String updateUser) {
		this.updateUser = updateUser;
	}

	public String getMacAddress() {
		return macAddress;
	}

	public void setMacAddress(String macAddress) {
		this.macAddress = macAddress;
	}

	public Integer getOnlineStatus() {
		return onlineStatus;
	}

	public void setOnlineStatus(Integer onlineStatus) {
		this.onlineStatus = onlineStatus;
	}

	public Integer getSessionStatus() {
		return sessionStatus;
	}

	public void setSessionStatus(Integer sessionStatus) {
		this.sessionStatus = sessionStatus;
	}

	@Override
	public String toString() {
		return "NeElement [neNeid=" + neNeid + ", coonReqUrl=" + coonReqUrl + ", serialNumber=" + serialNumber
				+ ", deviceIp=" + deviceIp + ", modelId=" + modelId + ", description=" + description + ", manufacturer="
				+ manufacturer + ", softwareVersion=" + softwareVersion + ", creationTime=" + creationTime
				+ ", lastBootstrapTime=" + lastBootstrapTime + ", lastConnTime=" + lastConnTime + ", updateTime="
				+ updateTime + ", oui=" + oui + ", product=" + product + ", authRequirement=" + authRequirement
				+ ", dialectIP=" + dialectIP + ", updateUser=" + updateUser + ", macAddress=" + macAddress
				+ ", onlineStatus=" + onlineStatus + ", sessionStatus=" + sessionStatus + ", deviceGroupList="
				+ deviceGroupList + "]";
	}
		
	
}

搜索辅助类1:用于根据什么条件搜索。

package com.sunwave.deviceManagement.query;


import org.springframework.data.domain.Sort;

import com.sunwave.common.dao.UUIDSupport;

public class NeElementQuery extends SearchQuery {
	
	
    private String serverName;
    private Long neNeid;
    private String deviceIp;  //设备IP
    private String manufacturer;//制造商
   

	public String getDeviceIp() {
		return deviceIp;
	}

	public void setDeviceIp(String deviceIp) {
		this.deviceIp = deviceIp;
	}

	public String getManufacturer() {
		return manufacturer;
	}

	public void setManufacturer(String manufacturer) {
		this.manufacturer = manufacturer;
	}

	public Long getNeNeid() {
		return neNeid;
	}

	public void setNeNeid(Long neNeid) {
		this.neNeid = neNeid;
	}

	public String getServerName() {
        return serverName;
    }

    public void setServerName(String serverName) {
        this.serverName = serverName;
    }

    @Override
    public Sort.Direction getDirection() {
        Sort.Direction orderDirection = Sort.Direction.DESC;
        if (this.getOrderDesc() != null && !"".equals(this.getOrderDesc())) {
            if ("asc".equals(this.getOrderDesc().toLowerCase())) {
                orderDirection = Sort.Direction.ASC;
            }
        }
        return orderDirection;
    }

	@Override
	public String toString() {
		return "NeElementQuery [serverName=" + serverName + ", neNeid=" + neNeid + ", deviceIp=" + deviceIp
				+ ", manufacturer=" + manufacturer + "]";
	}
	
}

搜索辅助类2:用于根据什么条件搜索。

package com.sunwave.deviceManagement.query;

import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;

import com.sunwave.common.dao.UUIDSupport;


/**
 * @author fuwen_li
 * @date   2020年8月19日
 * @time   上午11:03:41
 * 
 */
public class SearchQuery extends UUIDSupport {
	
	/*关键字查询*/
	private String keyword;
	/*页码*/
	private int pageIndex;
	/*每页显示大小*/
	private int pageSize;
	
	private String orderName;
	
	private String orderDesc;//订单说明
		

	public String getKeyword() {
		return keyword;
	}

	public void setKeyword(String keyword) {
		this.keyword = keyword;
	}

	public int getPageIndex() {
		if(this.pageIndex<1){
			pageIndex = 0;
		}
		else{
			pageIndex = pageIndex-1;
		}
		return pageIndex;
	}

	public void setPageIndex(int pageIndex) {
		this.pageIndex = pageIndex;
	}

	public int getPageSize() {
		return pageSize;
	}

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

	public String getOrderName() {
		return orderName;
	}

	public void setOrderName(String orderName) {
		this.orderName = orderName;
	}

	public String getOrderDesc() {
		return orderDesc;
	}

	public void setOrderDesc(String orderDesc) {
		this.orderDesc = orderDesc;
	}
	
	
	public String getOrderName(String basicName) {
		if(this.orderName!=null&&!"".equals(this.orderName)) {
			return this.orderName;
		}else {
			return basicName;
		}
	}
	
	public Direction getDirection() {
		Direction orderDirection = Sort.Direction.ASC;
		if(this.orderDesc!=null&&!"".equals(this.orderDesc)) {
			if("desc".equals(this.orderDesc.toLowerCase())){
				orderDirection = Sort.Direction.DESC;
			};
		}
		return orderDirection;
	}
	
	
}

Repository层:

package com.sunwave.deviceManagement.repository;

import java.util.List;

import com.sunwave.grouping.domain.NeElement;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

@Repository
public interface NeElementRepository extends JpaRepository<NeElement, Long>,  JpaSpecificationExecutor<NeElement> {

	 NeElement findByNeNeid(long neId);
	
}

service层:

package com.sunwave.deviceManagement.service;

import java.util.List;
import java.util.Map;
import java.util.Optional;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;

import com.sunwave.deviceManagement.query.NeElementQuery;
import com.sunwave.grouping.domain.NeElement;

public interface NeElementService {
	
	public Page<NeElement> findNeElementPage(NeElementQuery query);//分页查询
	/* 根据id获取用户信息 */
	public NeElement getNeElement(Long id) throws Exception;
	
	     
}

service的实现层serviceImpl:

package com.sunwave.deviceManagement.service.impl;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import com.sunwave.grouping.domain.NeElement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;

import com.sunwave.deviceManagement.query.NeElementQuery;
import com.sunwave.deviceManagement.repository.NeElementRepository;
import com.sunwave.deviceManagement.service.NeElementService;
import com.sunwave.grouping.domain.DeviceGroup;
import com.sunwave.grouping.domain.NeElement;
import com.sunwave.grouping.service.DeviceGroupService;

@Service
public class NeElementServiceImpl implements  NeElementService{

	@Autowired
	NeElementRepository neElementRepository;
	
	@Autowired
	DeviceGroupService deviceGroupService;
		
	
	@Override
	public Page<NeElement> findNeElementPage(NeElementQuery query) {
		Sort sort = new Sort(query.getDirection(), query.getOrderName("neNeid"));
		Specification<NeElement> specification = getWhereClause(query);
		
		PageRequest page = new PageRequest(query.getPageIndex(), query.getPageSize(), sort);
		Page<NeElement> all = neElementRepository.findAll(specification, page);	
		return all;
	}
	   
	private Specification<NeElement> getWhereClause(final NeElementQuery searchquery) {
		 return new Specification<NeElement>() {
			public Predicate toPredicate(Root<NeElement> root, CriteriaQuery<?> query, CriteriaBuilder cb){
				List<Predicate> predicate = new ArrayList<>();
				if (searchquery != null) {
					System.out.println("searchquery.getId():"+searchquery.getId());															
					if(searchquery.getId() != null && !"".equals(searchquery.getId())) {					
//						DeviceGroup group = new DeviceGroup();
//						group.setId(searchquery.getId());	
//						System.out.println("group:"+group);
						 
						Predicate p = cb.equal( root.join(root.getModel().getList("deviceGroupList",DeviceGroup.class), JoinType.INNER).get("id").as(String.class), searchquery.getId());
	                    predicate.add(p);		                   			            
					//	 predicate.add( cb.equal(root.get("deviceGroupList").get,searchquery.getId()));
					}
                   if (searchquery.getDeviceIp()!= null){               	  
                	      predicate.add( cb.like(root.get("deviceIp"),"%"+searchquery.getDeviceIp()+"%"));
												
                	  }	
                   if(searchquery.getManufacturer() != null) {
                	 predicate.add( cb.like(root.get("manufacturer"),"%"+searchquery.getManufacturer()+"%"));	
                	 /*predicate.add( cb.equal(root.get("manufacturer"),searchquery.getManufacturer()));	*/
                }
                        
				}								
				Predicate[] pre = new Predicate[predicate.size()];
	            return query.where(predicate.toArray(pre)).getRestriction();
			}
		};		
	}


	  
}

最后是controller层:

package com.sunwave.deviceManagement.controller;

import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.log;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.excel.metadata.Sheet;
import com.sunwave.common.EventType;
import com.sunwave.config.RedisService;
import com.sunwave.deviceManagement.domain.NeModelParam;
import com.sunwave.deviceManagement.query.NeElementQuery;
import com.sunwave.deviceManagement.service.NeElementService;
import com.sunwave.deviceManagement.service.NeModelParamService;
import com.sunwave.dto.OperationDto;
import com.sunwave.grouping.domain.NeElement;
import com.sunwave.sender.MessageSender;
import com.sunwave.utils.ExportUtil;
import com.sunwave.utils.HttpUtil;
import com.sunwave.utils.JacksonUtil;
import com.sunwave.vo.GroupVo;
import com.sunwave.vo.ParamVo;
import com.sunwave.vo.Result;

import io.swagger.annotations.ApiOperation;

/**
 * @author lfw
 * @date   2020年8月5日
 * @time   上午8:32:00
 * 
 */
@CrossOrigin//此注解可解决跨域问题
@RestController
@RequestMapping("/api/neElement")
public class NeElementController {
	
	private final static Logger logger = LoggerFactory.getLogger(NeElementController.class); 
	
	@Autowired
	NeElementService neElementService;
	
	 @Resource
	 RedisTemplate  redisTemplate;
	 
	 @Autowired
	 RedisService redisService;
	 
	 @Autowired
	 MessageSender messageSender;
	   
	 @Autowired
	 NeModelParamService neModelParamService;
	 

	    
	    @SuppressWarnings("finally")
		@RequestMapping(value="/getNeElement",method = RequestMethod.POST)//分页查询
		@ResponseBody
		public Page<NeElement> getNeElement(@RequestBody NeElementQuery query){
	    	logger.info("Enter into NeElementController.getNeElement()");
	    	Page<NeElement> neElement= null;
			try {
				 neElement= neElementService.findNeElementPage(query);
				
			} catch (Exception e) {
				// TODO Auto-generated catch block
				logger.error("Error in NeElementController.getNeElement():"+e.getMessage());
			}	
			finally{
				logger.info("Exist NeElementController.getNeElement()");
							
				return neElement;
			}
		
	    }
	
  
	    @ResponseBody
		@ApiOperation(value = "导出excel",httpMethod="GET") 
	    @GetMapping("/exportExcel")
		public  Result exportExcel(HttpServletResponse response,@RequestBody GroupVo groupVo) {	
			logger.info("Enter into NeElementController.exportExcel");
			try { 
				List<NeElement> list=new ArrayList<NeElement>();
				for (int j = 0; j <groupVo.getNeIdList().size(); j++) {
					Long neId =  groupVo.getNeIdList().get(j);		         		           
				    NeElement element = neElementService.getElementExcel(neId);				
		       
			        list.add(element);
				}
				Sheet sheet = new Sheet(1, 0,NeElement.class);				
			  ExportUtil.doExportExcel(response, "Element", "sheet1", sheet, list);
				
			}catch (Exception e) {
			   logger.error("Error in NeElementController.exportExcel()" + e.getMessage());			   
			return Result.failure(100, "导出失败");
				   
		    }		
			logger.info("Exist NeElementController.exportExcel()");
			return 	 Result.ok("导出成功");
			
		}
	 

		
}

🆗了,自己把多余的代码去掉,核心在service的实现层。

最后加上几个实用工具类:
1、导出excel的工具类:

package com.sunwave.utils;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;


import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.support.ExcelTypeEnum;

/**
 *  阿里easyexcel  xlsx导出
 */
public class ExportUtil {

 /**
  *  xlsx导出
  * @param response   HttpServletResponse
  * @param fileName   文件名称
  * @param sheetName   sheet名称
  * @param sheet    Sheet sheet = new Sheet(1, 0,UserDTO.class);需要被导出的实体类,实体类需要继承BaseRowModel
  * @param list    需要导出的数据集
  * @throws IOException
  */
 @SuppressWarnings({ "deprecation", "rawtypes" }) 
 public static void doExportExcel(HttpServletResponse response,String fileName,String sheetName,Sheet sheet,List list) throws IOException
 {
   ServletOutputStream out = response.getOutputStream();
         ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);
         //设置自适应宽度      
         sheet.setAutoWidth(Boolean.TRUE);
         // 第一个 sheet 名称
         sheet.setSheetName(sheetName);
         writer.write(list, sheet);
         //通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
         response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xlsx");
         writer.finish();
         response.setContentType("multipart/form-data");
         response.setCharacterEncoding("utf-8");
         out.flush();
 } 
}

2、返回值封装工具类:

package com.sunwave.vo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;

import java.util.HashMap;
import java.util.Map;

/**
 * 
 * @author  ylf
 * @date	2020年3月12日
 * @time	上午11:41:15
 * @param <T>
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Result<T> {

    private static final String CODE = "code";
    private static final String MSG = "msg";

    private Integer code=200;
    private String msg="操作成功";
    private String description;
    private T data;

    private HashMap<String,Object> exend;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public Result setData(T data) {
        this.data = data;
        return this;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @JsonIgnore
    public HashMap<String, Object> getExend() {
        return exend;
    }

    public void setExend(HashMap<String, Object> exend) {
        this.exend = exend;
    }

    public Result() {
        exend = new HashMap<>();
    }

    public static Result failure(int code, String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }

    public static Result ok(String msg) {
        Result result = new Result();
        result.put("msg", msg);
        return result;
    }

    public static Result ok(Map<String, Object> map) {
        Result result = new Result();
        result.exend.putAll(map);
        return result;
    }

    public static Result ok() {
        return new Result();
    }

    public Result put(String key, Object value) {
        exend.put(key, value);
        return this;
    }
}

3、json工具类:

package com.sunwave.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class JacksonUtil {

    private static final Log logger = LogFactory.getLog(JacksonUtil.class);

    public static String parseString(String body, String field) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node;
        try {
            node = mapper.readTree(body);
            JsonNode leaf = node.get(field);
            if (leaf != null)
                return leaf.asText();
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }


    public static List<String> parseStringList(String body, String field) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node;
        try {
            node = mapper.readTree(body);
            JsonNode leaf = node.get(field);

            if (leaf != null)
                return mapper.convertValue(leaf, new TypeReference<List<String>>() {
                });
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public static Integer parseInteger(String body, String field) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node;
        try {
            node = mapper.readTree(body);
            JsonNode leaf = node.get(field);
            if (leaf != null)
                return leaf.asInt();
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public static List<Integer> parseIntegerList(String body, String field) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node;
        try {
            node = mapper.readTree(body);
            JsonNode leaf = node.get(field);

            if (leaf != null)
                return mapper.convertValue(leaf, new TypeReference<List<Integer>>() {
                });
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }


    public static Boolean parseBoolean(String body, String field) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node;
        try {
            node = mapper.readTree(body);
            JsonNode leaf = node.get(field);
            if (leaf != null)
                return leaf.asBoolean();
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public static Short parseShort(String body, String field) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node;
        try {
            node = mapper.readTree(body);
            JsonNode leaf = node.get(field);
            if (leaf != null) {
                Integer value = leaf.asInt();
                return value.shortValue();
            }
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public static Byte parseByte(String body, String field) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node;
        try {
            node = mapper.readTree(body);
            JsonNode leaf = node.get(field);
            if (leaf != null) {
                Integer value = leaf.asInt();
                return value.byteValue();
            }
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public static <T> T parseObject(String body, String field, Class<T> clazz) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node;
        try {
            node = mapper.readTree(body);
            node = node.get(field);
            return mapper.treeToValue(node, clazz);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public static <T> T parseObject(String body, Class<T> clazz) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node;
        try {
            node = mapper.readTree(body);
            return mapper.treeToValue(node, clazz);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public static <T>  List<T> parseObjectList(String body, String field, Class<T> tClass) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node;
        List<T> result = new ArrayList<>();
        try {
            node = mapper.readTree(body);
            JsonNode leaf = node.get(field);
            if (leaf != null){
                List list = mapper.convertValue(leaf, new TypeReference<List<T>>() {
                });
                for (Object o : list) {
                    String s = toJson(o);
                    T t = mapper.convertValue(toNode(s), tClass);
                    result.add(t);
                }
                return result;
            }


        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public static Object toNode(String json) {
        if (json == null) {
            return null;
        }
        ObjectMapper mapper = new ObjectMapper();
        try {

            return mapper.readTree(json);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        return null;
    }

    public static Map<String, String> toMap(String data) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.readValue(data, new TypeReference<Map<String, String>>() {
            });
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public static String toJson(Object data) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.writeValueAsString(data);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

以后继续分享。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值