return 如何使用 jaxrs 在 json 中将 BigDecimal 作为十进制数?
How do return a BigDecimal as decimal in json using jaxrs?
我正在使用 Tomee 8 作为应用程序服务器,当我的休息服务 return 是 BigDecimal 时我遇到了这个问题。
这是我的服务:
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/v0")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class RSDummyCheck {
@Path("/dummyCheck")
@POST
public Response dummyCheck(Dummy input){
Dummy resultado = input;
return Response.ok(resultado, "application/json").build();
}
}
输入为
import java.math.BigDecimal;
import java.util.Date;
public class Dummy{
BigDecimal numero;
public BigDecimal getNumero() {
return numero;
}
public void setNumero(BigDecimal numero) {
this.numero = numero;
}
public String toString() {
return "Dummy numero:"+this.numero
}
}
因此,当我尝试该服务时,发送此 json 消息:
{
"numero": 23.4
}
我收到了这个回复
{
"numero": "23.4"
}
但我希望收到没有引号的相同内容,而不是字符串。
Tomee 8 默认使用 Apache Johnzon 作为 JSON 提供商。有问题吗?
这里有什么问题?为什么 return 值显示为字符串而不是小数?
您需要使用 MapperConverter 对象。
例如,您可以实现 ObjectConverter.Codec 接口。
此代码可满足您的要求。
例如:您可以在所需字段中包含 @JohnzonConverter(MyBigDecimalValueConverter.class)
。
public class MyBigDecimalValueConverter implements ObjectConverter.Codec<BigDecimal> {
@Override
public void writeJson(BigDecimal value, MappingGenerator jsonbGenerator) {
jsonbGenerator.getJsonGenerator().write(value);
}
@Override
public BigDecimal fromJson(JsonValue jsonValue, Type targetType, MappingParser parser) {
return parser.readObject(jsonValue, targetType);
}
}
我正在使用 Tomee 8 作为应用程序服务器,当我的休息服务 return 是 BigDecimal 时我遇到了这个问题。
这是我的服务:
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/v0")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class RSDummyCheck {
@Path("/dummyCheck")
@POST
public Response dummyCheck(Dummy input){
Dummy resultado = input;
return Response.ok(resultado, "application/json").build();
}
}
输入为
import java.math.BigDecimal;
import java.util.Date;
public class Dummy{
BigDecimal numero;
public BigDecimal getNumero() {
return numero;
}
public void setNumero(BigDecimal numero) {
this.numero = numero;
}
public String toString() {
return "Dummy numero:"+this.numero
}
}
因此,当我尝试该服务时,发送此 json 消息:
{
"numero": 23.4
}
我收到了这个回复
{
"numero": "23.4"
}
但我希望收到没有引号的相同内容,而不是字符串。
Tomee 8 默认使用 Apache Johnzon 作为 JSON 提供商。有问题吗?
这里有什么问题?为什么 return 值显示为字符串而不是小数?
您需要使用 MapperConverter 对象。
例如,您可以实现 ObjectConverter.Codec 接口。
此代码可满足您的要求。
例如:您可以在所需字段中包含 @JohnzonConverter(MyBigDecimalValueConverter.class)
。
public class MyBigDecimalValueConverter implements ObjectConverter.Codec<BigDecimal> {
@Override
public void writeJson(BigDecimal value, MappingGenerator jsonbGenerator) {
jsonbGenerator.getJsonGenerator().write(value);
}
@Override
public BigDecimal fromJson(JsonValue jsonValue, Type targetType, MappingParser parser) {
return parser.readObject(jsonValue, targetType);
}
}