当我要对一个Bean进行JSON转换但将一个属性序列化为字符串时,必须使用@JsonXyz批注。
一个例子: 我有一个豆子:
public MyBean {
private double myDouble;
//getter and setter
}
我想要一个类似JSON的
{'myDouble':'100.0'}
代替:
{'myDouble':100.0}
因此,值100.0应该用引号引起来。
答案 0 :(得分:1)
如果您使用的是Jackson,则可以使用@JsonSerialize
和ToStringSerializer
:
public MyBean {
@JsonSerialize(using = ToStringSerializer.class)
private double myDouble;
//getter and setter
//constructors
}
要测试的代码(杰克逊版本2.9.8
):
MyBean myBean = new MyBean(20.3);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(myBean);
System.out.println(json);
输出为:
{"myDouble":"20.3"}
答案 1 :(得分:1)
您可以将@JsonSerialize
与ToStringSerializer
结合使用:
@Data
public class MyBean {
@JsonSerialize(using = ToStringSerializer.class)
private double myDouble;
}
或将@JsonFormat
与JsonFormat.Shape.STRING
一起使用:
@Data
public class MyBean {
@JsonFormat(shape = Shape.STRING)
private double myDouble;
}
两种方法都会产生相同的结果。
如果您打算在多个地方使用这些注释,可以考虑使用@JacksonAnnotationsInside
来创建包含一个或多个Jackson注释的自定义注释:
@Retention(RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = ToStringSerializer.class)
public @interface JsonString {
}
@Data
public class MyBean {
@JsonString
private double myDouble;
}
答案 2 :(得分:0)
因此要转换为字符串,您需要调用double的非基元,即Double
如下:
double myDouble = 10.0;
Double.toString(myDouble);
这样,您的double现在将成为字符串,但是您选择解析为json时,现在会将结果视为字符串,而不是double或Number
答案 3 :(得分:0)
将getter更改为以字符串形式而不是double形式返回值
return String.valueof(variable)
然后将setter作为字符串参数获取值,并用Double.parseDouble(variable)
设置double值
Double myDouble;
public String getMyDouble(){
return String.valueof(myDouble);
}
public void setMyDouble(String str){
myDouble = Double.parseDouble(str);
}