Как вернуть 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);
    }
}
Другие вопросы по тегам