将逗号分隔的键=值对转换为Java对象

时间:2016-08-09 19:34:15

标签: java csv

我正在尝试实现一个HttpMessageConverter,它允许我的程序通过REST与嵌入式智能控制器进行通信。

控制器响应字符串,如:

ret=OK,htemp=27.0,hhum=-,otemp=27.0,err=0,cmpfreq=24

我有一个名为SensorInfo的Java对象。

public class SensorInfo {

   String ret;
   Double htemp;
   String hhum;
   Double otemp;
   Integer err;
   Integer cmpfreq;

   // getters and setters

}

将控制器响应映射到上述Java对象的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以简单地拆分字符串并根据需要分配每个元素。你有:

ret=OK,htemp=27.0,hhum=-,otemp=27.0,err=0,cmpfreq=24

让我们假设您已将其存储在名为myStr的变量中。那么你需要做的就是:

String[] strSplit = myStr.split(" ");
SensorInfo info = new SensorInfo();
info.ret = afterEquals(strSplit[0]);
info.htemp = Double.parse(afterEquals(strsplit[1]));
info.hhum = afterEquals(strSplit[2]);
info.otemp= Double.parse(afterEquals(strSplit[3]));
info.err = Integer.parse(afterEquals(strSplit[4]));
info.cmpfreq = Integer.parse(afterEquals(strSplit[5]));

您将声明一种方法,以便在等号后提取响应的一部分以进行上述工作:

private String afterEquals(String input) {
  input.substring(input.indexOf('=') + 1);
}

请注意,这假定您的回复顺序是固定的。如果不是,您可以轻松地修改它以查看每个参数以查看要将其分配给哪个变量。

答案 1 :(得分:0)

您应该添加错误处理,因为以下内容并不容易出错,但可能会对您有所帮助:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ValueAssigner {
    // ret=OK,htemp=27.0,hhum=-,otemp=27.0,err=0,cmpfreq=24
    String ret;
    Double htemp;
    String hhum;
    Double otemp;
    Integer err;
    Integer cmpfreq;

    public static void main(String[] a) {
        System.out.println(new ValueAssigner("ret=OK,htemp=27.0,hhum=-,otemp=27.0,err=0,cmpfreq=24").getCmpfreq());
    }

    ValueAssigner(String in) {
        String[] split = in.split(",");
        for (String s : split) {
            Method method;
            String[] keyValue = s.split("=");
            try {
                method = this.getClass().getMethod("set" + ucFirst(keyValue[0]), String.class);
                method.invoke(this, keyValue[1]);
            } catch (IllegalArgumentException | InvocationTargetException | IllegalAccessException | SecurityException | NoSuchMethodException e) {
                // e.printStackTrace();
                // omitted here
            }

        }
    }

    private static String ucFirst(String in) {
        return in.substring(0, 1).toUpperCase() + in.substring(1);
    }


    public String getRet() {
        return ret;
    }

    public void setRet(String ret) {
        this.ret = ret;
    }

    public Double getHtemp() {
        return htemp;
    }

    public void setHtemp(String htemp) {
        this.htemp = Double.parse(htemp);
    }

    public String getHhum() {
        return hhum;
    }

    public void setHhum(String hhum) {
        this.hhum = hhum;
    }

    public Double getOtemp() {
        return otemp;
    }

    public void setOtemp(String otemp) {
        this.otemp = Double.parse(otemp);
    }

    public Integer getErr() {
        return err;
    }

    public void setErr(String err) {
        this.err = Integer.parse(err);
    }

    public Integer getCmpfreq() {
        return cmpfreq;
    }

    public void setCmpfreq(String cmpfreq) {
        this.cmpfreq = Integer.parse(cmpfreq);
    }
}