天天看點

使用BeanUtils.populate完成json對象複制到Java Bean

**

實作步驟,

**

1.new Java Bean :

2.通過net.sf.json工具的JSONObject方法解析輸入JSON,強轉為Map

  1. 通過 将map内容拷貝到Bean對象
  1. 建立子屬性清單,用于存儲子對象
  1. 從map中擷取嵌套資料,并轉換為map
  1. 将map拷貝到bean
for(ele<- fences){
      val eleFenPOJO = new ElefencesVo
      val tmap = ele.asInstanceOf[util.Map[String, Object]]
      BeanUtils.populate(eleFenPOJO,tmap)
      lists.add(eleFenPOJO)
    }
           
  1. 将bean 設定給之前的執行個體

**

完整示例:

**

  1. 實體類:
import scala.beans.BeanProperty

class ElefencesVo {
  @BeanProperty var eleId:Int =_
  @BeanProperty  var eleLat:Double=_
  @BeanProperty var eleLng:Double =_
  @BeanProperty var diffDist:Double =_


  override def toString = s"ElefencesVo($eleId, $eleLat, $eleLng, $diffDist)"
}
           
  1. 實體類:
import java.util

import scala.beans.BeanProperty
import java.util.List
import scala.collection.JavaConversions._

class RedisCacheEntity{
  @BeanProperty var deviceType:String=_
  @BeanProperty var devieId:Int=_
  @BeanProperty var reportTime:Long=_
  @BeanProperty var reportMode:String=_
  @BeanProperty var reportStatus:String=_
  @BeanProperty var speed:Int=_
  @BeanProperty var Lat:Double=_
  @BeanProperty var lng:Double=_
  @BeanProperty var heading:Int=_
  @BeanProperty var milleage:Long=_
  @BeanProperty var status:Int=_
  @BeanProperty var orderId:Int=_
  @BeanProperty var orderNo:String=_
  @BeanProperty var orderStatus:Int=_
  @BeanProperty var orderStatusName:String=_
  @BeanProperty var EquipmentName:String=_
  @BeanProperty var EquipmentType:Int=_
  @BeanProperty var EquipmentTypeName:String=_
  @BeanProperty var EquipmentStatus:Int=_
  @BeanProperty var EquipmentStatusName:String=_
  @BeanProperty var VechileId:Int=_
  @BeanProperty var VehicleStatus:Int=_
  @BeanProperty var VehicleStatusName:String=_
  @BeanProperty var VehicleDriverId:Int=_
  @BeanProperty var VehicleDriverName:String=_
  @BeanProperty var CenterId:Int=_
  @BeanProperty var CenterLat:Double=_
  @BeanProperty var CenterLng:Double=_
  @BeanProperty var CenterName:String=_
  @BeanProperty var CenterAddress:String=_
  @BeanProperty var elefences:util.List[ElefencesVo]= _


  override def toString = s"RedisCacheEntity(deviceType=$deviceType, devieId=$devieId, reportTime=$reportTime, reportMode=$reportMode, reportStatus=$reportStatus, speed=$speed, Lat=$Lat, lng=$lng, heading=$heading, milleage=$milleage, status=$status, orderId=$orderId, orderNo=$orderNo, orderStatus=$orderStatus, orderStatusName=$orderStatusName, EquipmentName=$EquipmentName, EquipmentType=$EquipmentType, EquipmentTypeName=$EquipmentTypeName, EquipmentStatus=$EquipmentStatus, EquipmentStatusName=$EquipmentStatusName, VechileId=$VechileId, VehicleStatus=$VehicleStatus, VehicleStatusName=$VehicleStatusName, VehicleDriverId=$VehicleDriverId, VehicleDriverName=$VehicleDriverName, CenterId=$CenterId, CenterLat=$CenterLat, CenterLng=$CenterLng, CenterName=$CenterName, CenterAddress=$CenterAddress, elefences=$elefences)"
}
           
  1. 主類:
import java.util

import net.sf.json.{JSON, JSONArray, JSONObject}
import com.alibaba.fastjson.{JSON => aliJSON}
import net.sf.json.JSON
import org.apache.commons.beanutils.BeanUtils
import org.apache.commons.lang3.StringUtils
import test.beans.{ElefencesVo, RedisCacheEntity, redisCacheEntitys, redisCacheEntitys2}
import scala.collection.JavaConversions._


object MethodTest  {

  def netSfJson(inpntJson:String):RedisCacheEntity={

    **val entitys = new RedisCacheEntity**
    val map: util.Map[String, Object] = JSONObject.fromObject(inputJson).asInstanceOf[util.Map[String, Object]]
    BeanUtils.populate(entitys,map)
    println(s" copy map to bean is :$entitys")

    val lists = new util.ArrayList[ElefencesVo]()
    val fences: JSONArray = map.get("elefences").asInstanceOf[JSONArray]

    for(ele<- fences){
      val eleFenPOJO = new ElefencesVo
      val tmap = ele.asInstanceOf[util.Map[String, Object]]
      BeanUtils.populate(eleFenPOJO,tmap)
      lists.add(eleFenPOJO)
    }
    entitys.setElefences(lists)
    println(entitys)
    entitys
  }

  def aliFastJson(inputJson: String):RedisCacheEntity={

    val entitys = aliJSON.parseObject(inputJson, classOf[RedisCacheEntity])
    println(entitys)
    entitys
  }

  def main(args: Array[String]): Unit = {

  }
//  var orderStatus:String = _
//
//  println(StringUtils.isEmpty(orderStatus))
//
//  var number:Int= -1
//  println(number.equals(-1))
//
//  println(null.equals("未發車"))

  println(System.currentTimeMillis())
//  val inputJosn:String ="{\n\t\"deviceType\": \"OBD\",\n\t\"devieId\": 3,\n\t\"reportTime\": 1610979802256,\n\t\"reportMode\": 3,\n\t\"reportStatus\": \"拐點上傳\",\n\t\"speed\": 30,\n\t\"Lat\": 20.23532532,\n\t\"lng\": 120.2353252,\n\t\"heading\": 182,\n\t\"milleage\": 2093,\n\t\"status\": 3,\n\t\"orderNo\": \"00402345\",\n\t\"orderId\": 234,\n\t\"orderStatus\": 3,\n\t\"orderStatusName\": \"返程\",\n\t\"EquipmentName\": \"SIM\",\n\t\"EquipmentType\": 2,\n\t\"EquipmentTypeName\": \"small card\",\n\t\"EquipmentStatus\": 2,\n\t\"EquipmentStatusName\": \"翻轉\",\n\t\"VechileId\": 3,\n\t\"VehicleStatus\": 3,\n\t\"VehicleStatusName\": \"超速\",\n\t\"VehicleDriverId\": 1008,\n\t\"VehicleDriverName\": \"peter\",\n\t\"CenterId\": 110,\n\t\"CenterLat\": 30.235325,\n\t\"CenterLng\": 132.23525,\n\t\"CenterName\": \"CDT\",\n\t\"CenterAddress\": \"江蘇省蘇州市供應業園區108号\"\n}"
  val inputJson = "{\n\t\"deviceType\": \"OBD\",\n\t\"devieId\": 3,\n\t\"reportTime\": 1610979802256,\n\t\"reportMode\": 3,\n\t\"reportStatus\": \"拐點上傳\",\n\t\"speed\": 30,\n\t\"Lat\": 20.23532532,\n\t\"lng\": 120.2353252,\n\t\"heading\": 182,\n\t\"milleage\": 2093,\n\t\"status\": 3,\n\t\"orderNo\": \"00402345\",\n\t\"orderId\": 234,\n\t\"orderStatus\": 3,\n\t\"orderStatusName\": \"返程\",\n\t\"EquipmentName\": \"SIM\",\n\t\"EquipmentType\": 2,\n\t\"EquipmentTypeName\": \"small card\",\n\t\"EquipmentStatus\": 2,\n\t\"EquipmentStatusName\": \"翻轉\",\n\t\"VechileId\": 3,\n\t\"VehicleStatus\": 3,\n\t\"VehicleStatusName\": \"超速\",\n\t\"VehicleDriverId\": 1008,\n\t\"VehicleDriverName\": \"peter\",\n\t\"CenterId\": 110,\n\t\"CenterLat\": 30.235325,\n\t\"CenterLng\": 132.23525,\n\t\"CenterName\": \"CDT\",\n\t\"CenterAddress\": \"江蘇省蘇州市供應業園區108号\",\n\t\"elefences\": [{\n\t\t\t\"eleId\": 1,\n\t\t\t\"eleLat\": 23.235325,\n\t\t\t\"eleLng\": 132.2345325,\n\t\t\t\"diffDist\": 0.23\n\t\t}, {\n\t\t\t\"eleId\": 1,\n\t\t\t\"eleLat\": 23.235325,\n\t\t\t\"eleLng\": 132.2345325,\n\t\t\t\"diffDist\": 0.23\n\t\t},\n\t\t{\n\t\t\t\"eleId\": 1,\n\t\t\t\"eleLat\": 23.235325,\n\t\t\t\"eleLng\": 132.2345325,\n\t\t\t\"diffDist\": 0.23\n\t\t}\n\t]\n}"
//  val inputJson = "{\n\t\"deviceType\": \"OBD\",\n\t\"devieId\": 3,\n\t\"reportTime\": 1610979802256,\n\t\"reportMode\": 3,\n\t\"reportStatus\": \"拐點上傳\",\n\t\"speed\": 30,\n\t\"Lat\": 20.23532532,\n\t\"lng\": 120.2353252,\n\t\"heading\": 182,\n\t\"milleage\": 2093,\n\t\"status\": 3,\n\t\"orderNo\": \"00402345\",\n\t\"orderId\": 234,\n\t\"orderStatus\": 3,\n\t\"orderStatusName\": \"返程\",\n\t\"EquipmentName\": \"SIM\",\n\t\"EquipmentType\": 2,\n\t\"EquipmentTypeName\": \"small card\",\n\t\"EquipmentStatus\": 2,\n\t\"EquipmentStatusName\": \"翻轉\",\n\t\"VechileId\": 3,\n\t\"VehicleStatus\": 3,\n\t\"VehicleStatusName\": \"超速\",\n\t\"VehicleDriverId\": 1008,\n\t\"VehicleDriverName\": \"peter\",\n\t\"CenterId\": 110,\n\t\"CenterLat\": 30.235325,\n\t\"CenterLng\": 132.23525,\n\t\"CenterName\": \"CDT\",\n\t\"CenterAddress\": \"江蘇省蘇州市供應業園區108号\"\n}"
  println(inputJson)

  println("alibaba parsing...")
  aliFastJson(inputJson)

  println("netsfjosn parsing")

  private val entitys: RedisCacheEntity = netSfJson(inputJson)
  private val fences: util.List[ElefencesVo] = entitys.getElefences
  for(ele<-fences){
    println(ele.getEleId,ele.getEleLat,ele.getEleLng,ele.diffDist)
  }
}