Proljetni uređivač prilagođenih svojstava

1. Uvod

Jednostavno rečeno, Spring koristi uređivače svojstava za upravljanje pretvorbom između Niz vrijednosti i običaj Objekt vrste; ovo se temelji na programu Java Beans PropertyEditor.

U ovom ćemo uputstvu razmotriti dva različita slučaja korištenja za demonstraciju automatsko vezivanje uređivača svojstava i prilagođeno povezivanje svojstava svojstava.

2. Automatsko vezivanje uređivača svojstava

Standard JavaBeans infrastruktura će se automatski otkriti PropertyEditor klase ako su u istom paketu kao i klasa kojom rukuju. Također, ovi moraju imati isti naziv kao i ta klasa plus Urednik sufiks.

Na primjer, ako kreiramo Kreditna kartica model class, tada bismo trebali nazvati klasu editor CreditCardEditor.

Krenimo sada primjer praktičnog vezivanja svojstava.

U našem ćemo scenariju proslijediti broj kreditne kartice kao varijablu puta u URL-u zahtjeva i tu ćemo vrijednost povezati kao kreditna kartica objekt.

Idemo prvo stvoriti Kreditna kartica klasa modela koja definira polja rawCardNumber, Identifikacijski broj banke (prvih 6 znamenki), broj računa (znamenke od 7 do 15) i kontrolni kod (zadnja znamenka):

javna klasa CreditCard {private String rawCardNumber; privatni Integer bankIdNo; privatni cijeli brojBr; privatni Integer checkCode; // standardni konstruktor, getteri, postavljači}

Dalje ćemo stvoriti CreditCardEditor razred. Ovo implementira poslovnu logiku za pretvaranje broja kreditne kartice navedenog kao Niz do a Kreditna kartica objekt.

Klasa uređivača svojstava trebala bi se proširiti PropertyEditorSupport i provesti getAsText () i setAsText () metode:

javna klasa CreditCardEditor proširuje PropertyEditorSupport {@Override javni niz getAsText () {CreditCard creditCard = (CreditCard) getValue (); vratiti kreditnu karticu == null? "": CreditCard.getRawCardNumber (); } @Override public void setAsText (tekst niza) baca IllegalArgumentException {if (StringUtils.isEmpty (text)) {setValue (null); } else {CreditCard creditCard = nova CreditCard (); creditCard.setRawCardNumber (tekst); Niz karticeNo = text.replaceAll ("-", ""); ako (cardNo.length ()! = 16) izbaci novo IllegalArgumentException ("Format kreditne kartice trebao bi biti xxxx-xxxx-xxxx-xxxx"); isprobajte {creditCard.setBankIdNo (Integer.valueOf (cardNo.substring (0, 6))); creditCard.setAccountNo (Integer.valueOf (cardNo.substring (6, cardNo.length () - 1))); creditCard.setCheckCode (Integer.valueOf (cardNo.substring (cardNo.length () - 1))); } catch (NumberFormatException nfe) {baciti novi IllegalArgumentException (nfe); } setValue (kreditna kartica); }}}

The getAsText () metoda poziva se pri serializaciji objekta na Niz, dok setAsText () koristi se za pretvaranje a Niz na drugi objekt.

Budući da su ove klase smještene u istom paketu, ne trebamo učiniti ništa drugo za vezivanje datoteke Urednik za tip Kreditna kartica.

Sada to možemo izložiti kao resurs u REST API-ju; operacija uzima broj kreditne kartice kao varijablu puta zahtjeva i Spring će tu tekstualnu vrijednost povezati kao a CrediCard objekt i proslijedite ga kao argument metode:

@GetMapping (value = "/ credit-card / {card-no}", proizvodi = MediaType.APPLICATION_JSON_UTF8_VALUE) public CreditCard parseCreditCardNumber (@PathVariable ("card-no") CreditCard CreditCard) {return creditCard; }

Na primjer, za URL uzorka zahtjeva / property-editor / credit-card / 1234-1234-1111-0019, dobit ćemo odgovor:

{"rawCardNumber": "1234-1234-1111-0011", "bankIdNo": 123412, "accountNo": 341111001, "checkCode": 9}

3. Vezanje uređivača prilagođenih svojstava

Ako nemamo potrebnu klasu tipa i klasu uređivača svojstava u istom paketu ili s očekivanim konvencijama imenovanja, morat ćemo definirati prilagođeno povezivanje između potrebne vrste i uređivača svojstava.

U našem scenariju vezanja prilagođenog uređivača svojstava, a Niz vrijednost će se proslijediti u URL kao varijabla puta, a mi ćemo tu vrijednost povezati kao ExoticType objekt koji vrijednost samo zadržava kao atribut.

Kao u odjeljku 2, napravimo prvo klasu modela ExoticType:

javna klasa ExoticType {naziv privatnog niza; // standardni konstruktor, getteri, postavljači}

I naša klasa prilagođenog uređivača svojstava CustomExoticTypeEditor koja se opet proteže PropertyEditorSupport:

javna klasa CustomExoticTypeEditor proširuje PropertyEditorSupport {@Override javni niz getAsText () {ExoticType exoticType = (ExoticType) getValue (); vratiti exoticType == null? "": exoticType.getName (); } @Override public void setAsText (Tekst niza) baca IllegalArgumentException {ExoticType exoticType = new ExoticType (); exoticType.setName (text.toUpperCase ()); setValue (exoticType); }}

Budući da Spring ne može otkriti uređivač svojstava, trebat će nam metoda označena s @InitBinder u našem Kontroler razred koji registrira urednika:

@InitBinder javna praznina initBinder (vezivo WebDataBinder) {binder.registerCustomEditor (ExoticType.class, novi CustomExoticTypeEditor ()); }

Tada možemo vezati korisnički unos za ExoticType objekt:

@GetMapping (value = "/ exotic-type / {value}", proizvodi = MediaType.APPLICATION_JSON_UTF8_VALUE) public ExoticType parseExoticType (@PathVariable ("value") ExoticType exoticType) {return exoticType; }

Za URL uzorka zahtjeva / property-editor / egzotični tip / strast-voće, dobit ćemo uzorak odgovora:

{"name": "STRAST-VOĆE"}

4. Zaključak

U ovom kratkom članku vidjeli smo kako možemo koristiti automatsko i prilagođeno vezivanje uređivača svojstava za pretvorbu čitljivog za ljude Niz vrijednosti složenim tipovima Java.

Puni izvorni kod naših primjera ovdje je, kao i uvijek, gotov na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found