Как вернуть BigDecimal в виде десятичного числа в json с помощью jaxrs?
Я использую Tomee 8 в качестве сервера приложений, и у меня возникают проблемы, когда служба отдыха возвращает 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. В чем проблема?
Что здесь не так? Почему возвращаемое значение отображается в виде строки, а не десятичного числа?
1 ответ
Вам нужно использовать объект 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);
}
}