Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 大十进制低值_Java_Mysql_Spring_Spring Boot_Spring Data - Fatal编程技术网

Java 大十进制低值

Java 大十进制低值,java,mysql,spring,spring-boot,spring-data,Java,Mysql,Spring,Spring Boot,Spring Data,我在mysql数据库中存储了非常低的值,类似于: 0.00000070 0.00000097 我使用spring boot将这些值作为rest api提供,我的模型映射如下: public class Account extends BaseEntity { @Column(name = "VALUATION", precision = 15, scale = 8) @JsonView({ ViewsUtil.Ticker.class, ViewsUtil.Chart.

我在mysql数据库中存储了非常低的值,类似于:

0.00000070
0.00000097
我使用spring boot将这些值作为rest api提供,我的模型映射如下:

public class Account extends BaseEntity {   

    @Column(name = "VALUATION", precision = 15, scale = 8)
    @JsonView({ ViewsUtil.Ticker.class, ViewsUtil.Chart.class })
    @Setter @Getter
    private BigDecimal valuation;

    // others fields
{
   "valuation": 9.7e-7
}
@JsonComponent
public class LowValueDeserializer extends JsonDeserializer<String> {

    @Override
    public String deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
        System.out.println(parser.getDecimalValue());

        return parser.getDecimalValue().toPlainString();
    }
}
在数据库中,它被正确地存储,就像我显示的那样,但要显示,它的显示方式如下:

public class Account extends BaseEntity {   

    @Column(name = "VALUATION", precision = 15, scale = 8)
    @JsonView({ ViewsUtil.Ticker.class, ViewsUtil.Chart.class })
    @Setter @Getter
    private BigDecimal valuation;

    // others fields
{
   "valuation": 9.7e-7
}
@JsonComponent
public class LowValueDeserializer extends JsonDeserializer<String> {

    @Override
    public String deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
        System.out.println(parser.getDecimalValue());

        return parser.getDecimalValue().toPlainString();
    }
}
有没有一种方式可以像存储一样显示

谢谢

----编辑

把我的模型改成这个

    @Column(name = "VALUATION", precision = 15, scale = 8)
    @JsonView({ ViewsUtil.Ticker.class, ViewsUtil.Chart.class })
    @JsonDeserialize(using = LowValueDeserializer.class)
    @Setter @Getter
    private BigDecimal valuation;
我的自定义反序列化程序如下所示:

public class Account extends BaseEntity {   

    @Column(name = "VALUATION", precision = 15, scale = 8)
    @JsonView({ ViewsUtil.Ticker.class, ViewsUtil.Chart.class })
    @Setter @Getter
    private BigDecimal valuation;

    // others fields
{
   "valuation": 9.7e-7
}
@JsonComponent
public class LowValueDeserializer extends JsonDeserializer<String> {

    @Override
    public String deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
        System.out.println(parser.getDecimalValue());

        return parser.getDecimalValue().toPlainString();
    }
}
@JsonComponent
公共类LowValueDeserializer扩展JsonDeserializer{
@凌驾
公共字符串反序列化(JsonParser解析器,反序列化上下文)引发IOException,JsonProcessingException{
System.out.println(parser.getDecimalValue());
返回parser.getDecimalValue().toPlainString();
}
}
从未调用system out,结果仍然相同。

更新: 正如JB Nizet在评论中所说,您必须使用:

将_BIGDECIMAL _写为_PLAIN

由于Jackson 2.2特定于数据类型的序列化下以及在默认值下设置为
false
时,可以使用
将BIGDECIMAL>写入为普通

您可以使用
ObjectMapper
中的
enable()
方法将其设置为
true
,如下所示:

ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN); 
String theWholeNumber = YourBigDecimalNumber.toPlainString();

在将BigDecimal转换为字符串时,必须使用
.toPlainString()
方法,如下所示:

ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN); 
String theWholeNumber = YourBigDecimalNumber.toPlainString();

我认为您的问题是,该值在您的JSON字符串中以指数显示。我认为这不是问题,因为您在客户端和服务器端使用相同的模型(希望如此)。如果要使用它,则无需更改格式。仅当您想显示它时,需要使用
.toPlainString()
方法将其转换为字符串。

更新: 正如JB Nizet在评论中所说,您必须使用:

将_BIGDECIMAL _写为_PLAIN

由于Jackson 2.2特定于数据类型的序列化下以及在默认值下设置为
false
时,可以使用
将BIGDECIMAL>写入为普通

您可以使用
ObjectMapper
中的
enable()
方法将其设置为
true
,如下所示:

ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN); 
String theWholeNumber = YourBigDecimalNumber.toPlainString();

在将BigDecimal转换为字符串时,必须使用
.toPlainString()
方法,如下所示:

ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN); 
String theWholeNumber = YourBigDecimalNumber.toPlainString();


我认为您的问题是,该值在您的JSON字符串中以指数显示。我认为这不是问题,因为您在客户端和服务器端使用相同的模型(希望如此)。如果要使用它,则无需更改格式。仅当您想显示它时,您需要使用
.toPlainString()
方法将其转换为字符串。

请参阅:查找WRITE\u bigdecim\u如果您想格式化bigdecim进行显示。即使您想要的格式与复制文章中使用的格式不同,这也是一个副本。@DwB在重复文章中使用
String.format()
是否有任何好处?应该更好地了解OP想要什么阅读我关于如何解决这个“问题”的第一条评论。关于上一次编辑:使用自定义反序列化程序(应该将JSON值转换为BigDecimal)无法解决JSON序列化问题(BigDecimal如何序列化为JSON值)。@JBNizet使用了您的建议,工作起来很有魅力!谢谢你看:寻找WRITE_BIGDECIMAL_,因为你想格式化BIGDECIMAL以供显示。即使您想要的格式与复制文章中使用的格式不同,这也是一个副本。@DwB在重复文章中使用
String.format()
是否有任何好处?应该更好地了解OP想要什么阅读我关于如何解决这个“问题”的第一条评论。关于上一次编辑:使用自定义反序列化程序(应该将JSON值转换为BigDecimal)无法解决JSON序列化问题(BigDecimal如何序列化为JSON值)。@JBNizet使用了您的建议,工作起来很有魅力!谢谢你是的,我尝试过这个,使用@JsonDeserialize,但是这个方法从未被调用编辑我的帖子并添加我说的代码。我尝试过这个,使用@JsonDeserialize,但是这个方法从未被调用编辑我的帖子并添加我说的代码