首页 > 其他分享 >springboot~Money类型在序列化时遇到的问题与解决

springboot~Money类型在序列化时遇到的问题与解决

时间:2022-10-07 18:37:39浏览次数:81  
标签:springboot Money boot Bean bean spring org 序列化

在java扩展包里,有这样一个包,它可以描述货币类型,它说币种和金额组成,可以应用在任何复杂的场合里,这个对象结构如下:

{
"price": {
"amount": 1799.99,
"currency": "USD"
}
}

如果希望引用Money类型包,可以使用下面的包路径

org.javamoney:moneta:1.1

对包进行更新,然后在代码中可以使用Money类型

@Builder
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {
private String name;
private String email;
@ValidateMoney(value = 1, message = "年纪最小为1岁.")
private Money price;

}

在进行单元测试时,我们把这个对象作为请求体,在webapi里进行接收,这时出现了一个money序列化的问题,如下异常

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.javamoney.moneta.Money`

主要原因是,你的money对象没有找到序列化的组成,我们需要安装一个第三方的组成,来帮我们实现序列化的工作,build.gradle里添加包引用

compile('org.zalando:jackson-datatype-money:1.0.0-RC2')

然后添加Jackson的配置文件,你可以在代码根目录去添加它

依赖包代码:

dependencies {
compile(
'org.springframework.boot:spring-boot-starter-web',
'org.zalando:jackson-datatype-money:1.0.0-RC2',
'org.javamoney:moneta:1.1'
)

testCompile(
'org.springframework.boot:spring-boot-starter-test',
'org.springframework.boot:spring-boot-starter-webflux',
'org.projectlombok:lombok',
'org.javamoney:moneta:1.1'
)

compileOnly(
'org.projectlombok:lombok',
'org.springframework.boot:spring-boot-configuration-processor'
)
}

程序代码:

@Configuration
class JacksonConfig {
@Bean
public MoneyModule moneyModule() {
return new MoneyModule().withMonetaryAmount(Money::of);
}
}

下面说几个全局性的注解:

​bean​​​(即Java bean)就是Java的类,或者说,就是Java语言的组件,充分体现了Java语言平台独立和面向对象编程的优势。JavaBeans是一代网络程序员的资源。它是Java语言的组件:​​bean​​的接口和通讯部分的标准,实现了bean的复用。

@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的​​<beans>​​,作用为:配置spring容器(应用上下文)

@Bean标注在方法上(返回某个实例的方法),等价于spring的xml配置文件中的​​<bean>​​,作用为:注册bean对象

下面使用@Bean注解需要注意的几点说明:

  1. @Bean注解在返回实例的方法上,如果未通过@Bean指定bean的名称,则默认与标注的方法名相同;
  2. @Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域;
  3. 既然@Bean的作用是注册bean对象,那么完全可以使用@Component、@Controller、@Service、@Ripository等注解注册bean,当然需要配置@ComponentScan注解进行自动扫描。

 


本文@Configuration和@Bean注解的参考来自​​​​

感谢各位的阅读!

作者:仓储大叔,张占岭,



标签:springboot,Money,boot,Bean,bean,spring,org,序列化
From: https://blog.51cto.com/u_15765017/5734832

相关文章

  • SpringBoot集成MyBatis(详细)
    前言JPA和MyBatis,JPA是SpringBoot官方的,前身就是著名的三大框架之一的Hibernate,好处是不用手写SQL(当然它也支持手写,如果必要的话),而MyBatis灵活性非常高,但是需要手写SQL语......
  • ctfshow新手杯剪刀石头布(session反序列化)
    看到ini_set('session.serialize_handler','php');让我不由自主的想起了session反序列化漏洞的一道题。直接百度会有很多文章这里不多介绍。因此我们的解法就是:1.post一......
  • ctfshow新手杯baby_pickle(python序列化与反序列化)
    题目附件代码如下:#Author:#Achilles#Time:#2022-9-20#For:#ctfshowimportbase64importpickle,pickletoolsimportuuidfromflaskimportFlask,......
  • SpringBoot整合Sharding-JDBC案例
    数据表t_user表为需要分库分表的表,user为其他表,user放在nestdr1中。对数据库实行读写分离nestdr1为从数据库。 查询  代码 pom<!--web-->......
  • Springboot 之 Filter 实现 Gzip 压缩超大 json 对象
    简介在项目中,存在传递超大json数据的场景。直接传输超大json数据的话,有以下两个弊端占用网络带宽,而有些云产品就是按照带宽来计费的,间接浪费了钱传输数据大导致......
  • CTFShow 反序列化
    序列化:是将变量转换为可保存或传输的字符串的过程反序列化(反串行化):就是在适当的时候把这个字符串再转化成原来的变量使用。notice:序列化只是将变量序列化。试图通过序......
  • SpringBoot整合Junit、MyBatis
                 ......
  • Prometheus 快速入门教程(七):SpringBoot 实现自定义指标监控
    上篇文章我们已经可以在Grafana上看到对应的SpringBoot应用信息了,通过这些信息我们可以对SpringBoot应用有更全面的监控。但是如果我们需要对一些业务指标做监控,我们......
  • SpringBoot 实现文件上传
    参考:Javaspringboot进阶教程文件上传功能实现后端代码编写常见错误分析与解决在Service业务层接口中增加一个上传文件的方法因为文件并不是上传至数据库中,所以......
  • springboot整合prometheus和grafana
    准备springBoot服务pom引入依赖<!--集成micrometer,将监控数据存储到prometheus--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-r......