中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~Money類(lei)型(xing)在序(xu)列化(hua)時遇到的問題與解決

在(zai)java擴展包(bao)里(li),有這樣一個(ge)包(bao),它可以(yi)描(miao)述貨幣(bi)類型,它說(shuo)幣(bi)種和金額組成,可以(yi)應(ying)用在(zai)任(ren)何復雜的場合(he)里(li),這個(ge)對象結構(gou)如下:

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

如果希(xi)望引(yin)用Money類型包,可以使(shi)用下面的(de)包路徑(jing)

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;

 }

在(zai)進(jin)行單元測試時,我們把這(zhe)個對象作為請(qing)求體(ti),在(zai)webapi里進(jin)行接收(shou),這(zhe)時出(chu)現了一個money序列化的問題(ti),如(ru)下(xia)異(yi)常(chang)

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

主要原因(yin)是,你的(de)money對象沒有(you)找(zhao)到序列(lie)化(hua)的(de)組成,我們(men)需要安裝一(yi)個第(di)三(san)方(fang)的(de)組成,來(lai)幫我們(men)實現序列(lie)化(hua)的(de)工(gong)作,build.gradle里添(tian)加包引用(yong)

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

然后添加Jackson的配置文(wen)件,你可以在代碼根目錄去添加它(ta)

依賴包代碼:

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);
  }
}

下(xia)面說幾個全局性的(de)注解:

(即Java bean)就是Java的類,或者說,就是Java語言的組件,充分體現了Java語言平臺獨立和面向對象編程的優勢。JavaBeans是一代網絡程序員的資源。它是Java語言的組件:的接口和通訊部分的標準,實現了bean的復用。

@Configuration標注在類上,相當于把該類作為spring的xml配置文件中的<beans>,作(zuo)用為:配置spring容器(應用上(shang)下文)

@Bean標注在方法上(返回某個實例的方法),等價于spring的xml配置文件中的<bean>,作(zuo)用為:注冊bean對象

下(xia)面(mian)使用(yong)@Bean注(zhu)解(jie)需要注(zhu)意的(de)幾點(dian)說明:

  1. @Bean注解在返回實例的方法上,如果未通過@Bean指定bean的名稱,則默認與標注的方法名相同; 
  2. @Bean注解默認作用域為單例singleton作用域,可通過@Scope(“prototype”)設置為原型作用域; 
  3. 既然@Bean的作用(yong)是注(zhu)冊bean對象,那么完全(quan)可(ke)以使用(yong)@Component、@Controller、@Service、@Ripository等注(zhu)解(jie)注(zhu)冊bean,當(dang)然需要配(pei)置@ComponentScan注(zhu)解(jie)進行自動掃描(miao)。

 


本文(wen)@Configuration和@Bean注解(jie)的參考(kao)來自:

感謝各位的閱讀!

posted @ 2018-05-10 18:47  張占嶺  閱讀(1535)  評論(0)    收藏  舉報