我是JAXB的新手并试图将JAXB类中的数据类型映射到它们的Java等价物,但它总是坚持要返回一个字符串。
给出以下XML:
var hbs = require('express-hbs');
/*
...
*/
app.engine('hbs', hbs.express4({
partialsDir : __dirname +'/views/partials',
defaultLayout : __dirname +'/views/layouts/default',
extname : '.hbs',
layoutsDir : __dirname +'/views/layouts',
}));
app.set('view engine', 'hbs');
app.set('views', __dirname + '/views');
我们可以看到该类型是在<Response>
<Label>shiftStartTime</Label>
<Value>06:30</Value>
<Type>Time</Type>
</Response>
元素中声明的。我想要的是将值作为Joda Time LocalTime返回。
目前我的代码如下:
<Type>
我可以在调试器中看到getValue()方法中的代码正在运行,但结果总是作为&#39;字符串&#39 ;.返回。
我明显遗漏了一些东西,因为在JAXB中必须有一种方法来根据import org.joda.time.format.DateTimeFormat
import org.joda.time.format.DateTimeFormatter
import javax.xml.bind.annotation.XmlRootElement
import javax.xml.bind.annotation.XmlElement
import javax.xml.bind.annotation.XmlAccessorType
import javax.xml.bind.annotation.XmlAccessType
@XmlRootElement(name="ResponseGroup")
@XmlAccessorType(XmlAccessType.FIELD)
class Response {
@XmlElement(name="Label")
private String label
@XmlElement(name="Value")
private String value
@XmlElement(name="Type")
private String type
DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("dd/MM/yyyy");
DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm");
def stringTypes = ["GPS", "Static Text", "Multi-Line Text", "Value List", "Image Capture", "Signature", "Text Box"]
def integerTypes = ["Integer"]
def doubleTypes = ["Summary", "Calculation", "Decimal"]
def timeTypes = ["Time"]
def dateTypes = ["Date"]
def booleanTypes = ["Checkbox"]
public String getLabel() {
return label
}
public String getType() {
return type
}
def getValue(){
if(stringTypes.contains(this.type)){
return this.value.toString()
}
else if (integerTypes.contains(this.type)){
return this.value.toInteger()
}
else if (doubleTypes.contains(this.type)){
return Double.parseDouble(this.value)
}
else if (timeTypes.contains(this.type)){
return timeFormatter.parseLocalTime(this.value)
}
else if (dateTypes.contains(this.type)){
return dateFormatter.parseLocalDate(this.value)
}
else if (booleanTypes.contains(this.type)){
return this.value.toBoolean()
}
else {
// Hoping for the best and returning a string
return this.value.toString()
}
}
}
元素映射Java类型。