如何将请求json映射成实体类

在开发过程中有时会遇到前台请求参数需要直接转换成对应的实体类,避免数据类型的转换,而请求数据类型多为json数据块。如何实现数据的直接转换呢?

开发场景:
前端请求json如下:

{
"id":"3",
"jobName":"test",
"jobGroup":"test",
"cronExpression":"0 0/1 * * * ?  ",
"implUrl":"test"
}

转换成目标实体如下:

public class ScheduleJob {

    private Long id;

    private String jobName;

    private int status;

    private String jobGroup;

    private String cronExpression;

    private String implUrl;

    private String remark;


}

实现方法:

public R save(HttpServletRequest request){
        String requestJson = HttpAnalysisUtils.resolveRequestToBody(request);
        ScheduleJob scheduleJob= (ScheduleJob) FastJsonConvertUtils.jsonToJavaObject(requestJson, ScheduleJob.class);
        //TODO 业务实现
        return R.ok();
    }

HttpAnalysisUtils

package com.starehealth.overseer.utils;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Set;

/**
 * Created by b 
 */
public class HttpAnalysisUtils {

    /**
     * analysis request json from url
     * @param request  method get
     * @return
     */
    public static String resolveRequestToUrl(HttpServletRequest request){
        Map requestMap = request.getParameterMap();// resqustMap type is <Object,String[]>
        /*把单个参数解析为字符 而不是数组*/
        Set<Map.Entry<String, Object>> requestEntries = requestMap.entrySet();
        requestEntries.parallelStream().forEach(n->{
            Object[] values = (Object[]) n.getValue();
            if (values.length == 1) n.setValue(values[0]);
        });
        return JsonConvertUtils.toJson(requestMap);
    }

    /**
     * analysis request json from body
     * @param request method post
     * @return
     */
    public static String resolveRequestToBody(HttpServletRequest request){
        try {
            int length = request.getContentLength();
            String requestStr = "";
            StringBuilder sb = new StringBuilder();
            if (length != 0) {
                InputStream inputStream = request.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                while ((requestStr = br.readLine()) != null) {
                    sb.append(requestStr);
                }
                br.close();
            }
            return sb.toString();
        }catch (IOException e){
            throw new RuntimeException(e);
        }
    }
}

FastJsonConvertUtils

package com.starehealth.overseer.utils;

import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.builder.ToStringBuilder;

import java.util.Map;

/**
 * fastJson 操作类
 * 
 * @author sl
 *
 */
public class FastJsonConvertUtils {


  /**
   * hippo-server used 清洗对象格式
   * 
   * @param obj origin obj
   * @return obj
   */
  public static Object cleanseToObject(Object obj) {
    if (obj == null) {
      return null;
    }
    try {
      if (obj.getClass().isPrimitive()) {
        return obj;
      } else {
        return JSON.toJSONString(obj);
      }
    } catch (Exception e) {
      throw new ClassCastException("obj cleanse:" + ToStringBuilder.reflectionToString(obj));
    }
  }


  @SuppressWarnings("unchecked")
  public static Map<String, Object> jsonToMap(String data) {
    return JSON.parseObject(data, Map.class);
  }



  public static Object jsonToJavaObject(String object, Class<?> parameterType) {

    return JSON.parseObject(object, parameterType);
  }
}

JsonConvertUtils

package com.starehealth.overseer.utils;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Set;

/**
 * Created by b 
 */
public class HttpAnalysisUtils {

    /**
     * analysis request json from url
     * @param request  method get
     * @return
     */
    public static String resolveRequestToUrl(HttpServletRequest request){
        Map requestMap = request.getParameterMap();// resqustMap type is <Object,String[]>
        /*把单个参数解析为字符 而不是数组*/
        Set<Map.Entry<String, Object>> requestEntries = requestMap.entrySet();
        requestEntries.parallelStream().forEach(n->{
            Object[] values = (Object[]) n.getValue();
            if (values.length == 1) n.setValue(values[0]);
        });
        return JsonConvertUtils.toJson(requestMap);
    }

    /**
     * analysis request json from body
     * @param request method post
     * @return
     */
    public static String resolveRequestToBody(HttpServletRequest request){
        try {
            int length = request.getContentLength();
            String requestStr = "";
            StringBuilder sb = new StringBuilder();
            if (length != 0) {
                InputStream inputStream = request.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                while ((requestStr = br.readLine()) != null) {
                    sb.append(requestStr);
                }
                br.close();
            }
            return sb.toString();
        }catch (IOException e){
            throw new RuntimeException(e);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43136566/article/details/82419452