我正在尝试实现一个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对象的最佳方法是什么?
答案 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);
}
}