From 73e6d92654e004d40c8c022daf9ba76a646ec600 Mon Sep 17 00:00:00 2001 From: Dharshi Balasubramaniyam <139672976+DharshiBalasubramaniyam@users.noreply.github.com> Date: Tue, 25 Jun 2024 09:06:18 +0530 Subject: [PATCH 1/5] Added new blog - Building RESTful CRUD API in springboot --- .../images/image01.png | Bin 0 -> 15534 bytes .../images/image02.png | Bin 0 -> 19068 bytes .../images/image03.png | Bin 0 -> 16884 bytes .../images/image04.png | Bin 0 -> 15912 bytes .../images/image05.png | Bin 0 -> 19390 bytes .../images/image06.png | Bin 0 -> 15216 bytes .../images/image07.png | Bin 0 -> 16064 bytes .../index.md | 550 ++++++++++++++++++ 8 files changed, 550 insertions(+) create mode 100644 blog/Building RESTful CRUD API in springboot/images/image01.png create mode 100644 blog/Building RESTful CRUD API in springboot/images/image02.png create mode 100644 blog/Building RESTful CRUD API in springboot/images/image03.png create mode 100644 blog/Building RESTful CRUD API in springboot/images/image04.png create mode 100644 blog/Building RESTful CRUD API in springboot/images/image05.png create mode 100644 blog/Building RESTful CRUD API in springboot/images/image06.png create mode 100644 blog/Building RESTful CRUD API in springboot/images/image07.png create mode 100644 blog/Building RESTful CRUD API in springboot/index.md diff --git a/blog/Building RESTful CRUD API in springboot/images/image01.png b/blog/Building RESTful CRUD API in springboot/images/image01.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0770caf1d8cd0cfebf44ff92602e739861fde8 GIT binary patch literal 15534 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 literal 0 HcmV?d00001 diff --git a/blog/Building RESTful CRUD API in springboot/images/image03.png b/blog/Building RESTful CRUD API in springboot/images/image03.png new file mode 100644 index 0000000000000000000000000000000000000000..ce737d082e96100048128a6076caca6c7858e687 GIT binary patch literal 16884 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 ZO#J_!fq`iO#6%mQ5@sm-0?0@p007|es6YS! literal 0 HcmV?d00001 diff --git a/blog/Building RESTful CRUD API in springboot/images/image04.png b/blog/Building RESTful CRUD API in springboot/images/image04.png new file mode 100644 index 0000000000000000000000000000000000000000..534cc13c0b870682853e0bd5957af979a245430f GIT binary patch literal 15912 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 un3+K0|ILH^wE)QbkDQr_2_)~|7JA* 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 literal 0 HcmV?d00001 diff --git a/blog/Building RESTful CRUD API in springboot/images/image07.png b/blog/Building RESTful CRUD API in springboot/images/image07.png new file mode 100644 index 0000000000000000000000000000000000000000..6e03328930bd9a53c8884a289debc2b4e52d21c1 GIT binary patch literal 16064 zcmb8WW0WRA^Dp?cZA{y?ZM&y!+qP}nwr$(iwB0>zyL;z-@Bi-IJ^N|%oUHhr$f&5y zlTlHbQIU$0Vq)!l0DzjP&~Me>9O}>j008n|F?R7x2!$`cSkKDz3*=ah^xQESY#<823p0M7|k4xv3r{V*` z2j}09v%HVIa)@lR?>R%e+rDT1pAUbJMZddexgYwUt|gFVke}Uhh#%XIAI|TkZ><)) zo4yo0$JemiwyWJ{{!O1*$GDA?f?e_tzYqND+-Se0AHsvY6aKoN&L`kcuQ&X6{;Th% zx{U3cCBHvUz)yZBeb+zTzFO~CejslX*Z61rn|@P2VV?ybfN#++^3Ru(x)=PP9|gaN zThR~lf4A@M@e}v<`^EYR{7`>QeWrcM-|qhWynR#pQU3&en!O`z&6)G({UrW$eCzF@ zy!k!lz3c7q&wiZ#{Jfxj#QfZRrwy)MuKfh4LED{W>@|9!=qJ&?;BWPbPpH%64zKfX z9~~jAXF+^)X9v7j?hGlef{m(_ZNZWEndD?#r~0ZBtdi5=tL(VYzsPCUrp1bctOk&w z5=OPORA_@~UIPJ_>@mJ{hG1J?^rc+-i0}WLR=;OIw?50Knl76p1~bYnLE)wd69Q4; z%9I-ukP26rhJSjyF*cHUv$K(|bu5kVg)jIa{=fR=&r&_S z$X_}$y>~y$q~esLZ237pspQF?sO+Dz}js6 zhaQ*H5L-HVW0_T8aBS9sji#k;)IH$@t~y)w+!q?02@y)g6tUe5>7Yy7m444oM(vo-{A^ z=hoE};*OyYT=|jIsXtlAwl-m^mN^gpdy_lL;>U+`wlt<@&g#Hf1Monc7G0;vG~+os zbipS>fTwNBO%+C&$=F$_CiWx!tjvUnT(CSDipw|z7+O$VAWSB30JWRAW7N$oI=+|Z zm@xd*a5o{~gAgOsS<)@w7X_-0UqeD5C@JP;A>f#M3Q$nHGz;%zUb?6|-Rpe$GZG&K z6o&trQ7!75-DvlI{|(k@l3{r0EXGI6T1_^etM}*rkHsbFI9#opXSZpQ1k+WaXowM_ z|Nk1CF>VY9fAcP=F3>R%`!;WF!pRsN-kS((JrY8{UnhlYk`hCCg_I|gUwSpVyrDJz z^}Qp6k{769#DXGac2E?G*Y@V0^A(E*brGU#*Q^pcO(KcE(jbgE zOCb|+#&IE7I3e)@vB2>G5-H=(|Q3$W(OoK zMYQQ8D6&WbiHIr5fRxj60WEHZt-Nos=rKFz{qMEptA#rGpJcc&iz1OOPEL;O@_>U~`k*{& z!dCKxfMskT1isZPpgzctgs)~JKxJ`Y4=W23K88l`025;sDFp!|78FCLao;HSseyTv zs6JF(B$DzSo}T>lW@KO(pnIof1~|MaHxe)qRTvBCiz<%$_eYi_00jc!6H+jrqo5ie zxqiZg*{v3u6}cGIhQN)!-`t#s0@Iod>^mqpD8s*u@cYE_`(*gChx9I!?c1Rj#QUef zm;R5VTUo9ksY&|ZpP#4SPfY)(xg-q$_((Ek%}6MXpv6%D z0Lw$UucORet@E-Fa$pS^pM!ssz=g0%bZdV+Cx1fyL%q)HzUmb4>jU_^U-Avro)`~k zr4(0g{BBG&yxV;VPBBvF40t|#dtu^912R60=7)gxgSjLHY%8G_*Q{w@*S>bF^xNvD z4<2o!F1}*g{X59CM;+E@tV0mBoZ6g*l#*YgD|}}duZ=0P%Lf{9w~y&4ys!4&cgN)n zUg$$Kz3;cWoch_mi#c07^-qGwXf&%cQRBR6x;cqg9N&c^KXCYS@d5MkbS?zq;^pXZ zq=;Yg2imB;O#l|p^&kDHWHlu{;3fB(B!=$;^rJoxxYD36Bk#}hlhPG{0FR-&^JL|E zX+XCrBBX?pXJuMxMST^Tk~2`Dv1~Em-iUwFcMcSR|C?cZ9yq=jQ;iwqIaS9V{3LG( zkEI*36#g343DrX?6Gn)>75c;28?9#NHX3ULe4b`kXn*Ptx@qp?x7gQwE=C z7G=0GC_jJbqTONzw~NZFRY*mN?1A0rGeZx(D$+r*2=zeZOvz*jkcVKzYU~@Gg?HBQ zIkDqNi-O}l*WsDzgZL1)X{i+9N1riM*%wN@Ey}1##XUtdz_rMY^&E1v4RCx;&lD)C zVH+_u`@9awFUm=Kk%vBflc>2C0Ue}_k>BiO6tOJeSL_pZzfOB>jVzcIq@Ols){2iQ z(9$CRoDQPR^>gQ74lF5oQ+3_SW@qTbpETt&4!Jc88XC3^mi3`!OT3zK>-yzz@EWw1 z!sd9<$VxuP@5Ai~2=R*`gx=U`2mn^73@#5*V&s?*pCXT~s3CIR9#3=WxMEmd2kzA8 z#~Pjpw)VTZ*HQtpr@kaf-{?N&Bz2!vWb&=l)_IbO_oKg{@NTFgOTN%ezq^<9#bPge ztO^D6PJL5yp;*4WemeX8n9KB0LXIC;`1H@4%VVfm%lTbSS5?bZ<}iA+&}L8#IJ5&c zG@lCm0e&7*p_kUn(=VSj$_UV+CXU$?5ms9UQ#V*fuYxAKQ%(U7N3YUE0jhaFzn<$@ z!kdr; ztC8cZPbgILUwj?$Ir{34VyEsa@>lSU@fdVSjI-cW5OcaRt58Lq)S_~!aRfQCbQxvb4IjeV z5s8;qH;ZjmKsN$Inbo~3^7+}2hk5rldsTup;pS@5H)Q};R6K_=@4V?D_Lh> zU?~<^_4#;!L8>1o1*BPL{%nU2`ocwN?9S5aSq%&sgl+sKYTr0j2iL2*38-@mLtSj0 zvn|Qyyk7F4de$$GAh>N?|H&vY=kZu*9zo|?wEXx)rp9louzc9@&KK}22pgvdi-Lph z_VX4k;(J?SP2B^4N%+e^K>yH9cZ~c+(>|4;?0uAh3hi26vdS`gz;|gB|62mh4PCi| zIQ#=GRHvup=FEQKiZf3%wxKbT7pgWhE5^T;;kR7}^CdoQw>3feg@~x9-WO4+`{Fm& ztA8>7g_FD?4z}EkLSBeQpC{UAi@t6^)`n+l1|NI{KBLMaZGTf8*@)tUS~FF3N*XK9 zEuYoNus1POBioYm;!N0Ve=@wh3=6c#IVWwK1o!97e@T4qrrzkq>Wt5WmRDBG2hT(7 zC+4RMAt72(v<5>&%%jk>!cWRhOL>a5H6tAAf+_^!Ac6Z0$Y4>pEyN&$3y1z?mSQ19 z1m`y~cK=(ae@Ye795^mf!Kz15!~#Mi1??q`+*#P7hBUzKC@TLydp4tEX!&%|M)5<| zpsQk8TlzN?m@c7ji?FiqOHE%)tn-E8(p2A`qUT~)#W2#HG$3UQPO5a~lB?|sW1r+9 ze!2Y91~_?VGbQ}F>bRT0p75aLuG$TB{dt$wmUTr=uuVe8+oWa63;0tiBJw2i&`D+D zm*xQQlWmBVFDsd6{aB$Tpcdfr?K>4aetKfqplEENg5KQktGpfsZ`4M3vnnsH>wUJ5 zKlY@2I+)(oCxxucq#~5xHtY5&7hLs9RpN&5OfQVT3Stda&TOR zO7sqewPoXA+H&Y+X2Ksavsz>sg!TFjx==kgz$`rV9o+aRM_Y(QYmYfRdKjoYa`L+m zks)I$8m?2cRvRL3L^WB=c^)s=b#KOZOD=#9DwHd1WUDL=7hVYPlJS^I`X}cmcHc`D z;j!o8Y8!%;jMSpl%zkizuDgt=!pWaqb<{pU`|1v~huzdeN93SNT!997f_j$P2&~J= z2on{=F9}i~V<9O!Iz=taxmg1Vk;VNnh`_#=O;nb7e|S88hwwdGq^Or5j8w2#7I;1D zqKii7nt|vWk7Tcto)kJxr7Y3&BXqPE*K<62)bj~aAzN^QA9B{jwLW|ZzfPd1AD#_S zbC9$Sko^D}MhQG2zPwsZw5QK_3gjn8Wilg(j9fb}!B9hM|IF)5PmCPx-2wxnD=m>5 zS>8RQcluaC%q%ra3Pmi*ACf~#$gJBHuS&ZNm>sH+)-PV z6e(@$2Q1jXX6R@;yx(&gKR4T}6AUm?@8ZA0>b^_q6E#+mUPkk0KP!^bO}`vc^9^yf zN*b2)%`N<0eZgpE&!%&T1{*Np@rhsOsnq&0FBpGbTXaDPa2&qtMnzdg6m=Ja`P1!w zyd5D3MT-c<0?KCPlY{yF!X4>2W23DV=?1Mb~V*`&ratv*A0hdjmvuWvQmkFH0!P5G@_STu7W)Bf#Ucb z=WA%6fE6jk_r&!lM(0SsI)bdU;U<~#&x9OeH)(VhJZ4shv%x{|cR@cKDX4rxrE?+t zB|mC`X?N~&Ou+{qjFIq5YO*M`$=zrTR!_(~)zf4mfY$<5fAJk^XF5yXeP-sxhkD-^ z?kZ}CUhg;+>j8ixp+QN$St&_CDn3Z`)q{{(EQx(CbfEM1=4MijYnoNtV$CA|3}wct zfQ~{Eh}ycw`deoHF)lP!uDTET1J5x!i@=IPPYaZ@vaN}$jA z@=K))Xcazn8uxqo)nTOz8maKc=Zzre+Sget(O})#kyhIo)>VD zO6VH==U=o3P!>^I9mVIs(al~Vc^7}1@quWW zzF#6%%NH`Z&teCV7l-zI8KZh5>~Sq8FZPz2(zHI|2E$V~d1h7QVL#=48RubM^8Xl9 z2$Z3zm{*g4cTDh;XKGweq;NKWMo1~+hytIQPedNeTDPE)-%|4gm%~b=oJK0lFUs*A zL0n{hrJ3$T8;gcmpQv+<2N(Ds=xF0+7{XPTEV_K#(%6ZCu=x>4m|d{KhqKkVSx<|( zbGLyO?y53%j^k8VV<8p8lo5~{Y zQ92hgx~08n?QMpS4{VnvI+kLmu0cFy=x>E=X;>;4q{erh@nQbTkjQvhi%0Qs!n7#- zD$VA)`?74XS6hjxiZ{;71V;1z(pgdaba}9AyXMWavi-ehJi0J}gIwnSr=>0*ex3s`ohdyoxgjwXtiJk=H zY2hz_^tPLKrE$*!=S(3kHr{KbtkCSLDO~6TJaLZ;)#i7gJHv~f<=rk%%OtTwfxrXx zrwutHcgCpKzNcTY$jpDXo3b^|w#|vT0{mOoiMu7=hy0O+U-blfiE;A~}k8eMW?3j&}69tWHD02-zOW10LL;J)o)#;{p{W3)7JH53u}KC)aqEq6iil zCMJWIh1DkOc~T=(j#Z3;WSCXNqa?8$0EXc9j7|7@-5QDSvoD&+f$L##e<}RunfwhC z)t{BLCihwjSzl`-jc_CAZaa>J=t%C*0GW}=84#U!(`g?+zeZjD#dy94(SihhejyuH zBq8+!;yiYw4Tx#=KIOC8JX{LZTf#DA$$d)2VdjeE&6ssUM9&{8r3^}izHdzywc>IR z#eU!=53h~-h$f`n^V&x%@xfT^#51sB?DDO34tb?iXjcXB^n=qHI_6=U=kqecW7>=) z4`t#&>r~Lmw%*>N8|&F|L@?)bbf3*?(+Ikd)%thV=##cV-)CoS2vly0fo~--aq_2- zt~p(#BW3G8R{3U&8)LJ_WiWodqnOp)_i?Y7-AcciL!Zdrq@!lXKe&<7Te;<|Y_N%^ zGq`dyZLSZnV(bC1;1UUq&| z=2<#D5pg*+1}D93WwgIaQj3_$m##wEbApAJ(v%lZqhCe#uNNqmvxRgv-j%|A@RaZS zzQjQ-QXRvEw#3~n_8M#d8C5wUOyN83~EzVsG%nYPLuA zD6InL)A2rOb&ctmuTe=`#^=ok($Y@vS6`(G;h~ARP}DoC&Wt=g{M^fMsW*Ixubn1- z)&w`dD~JdYEbnTkXl3mC3+0NLQyCZ3hrCnp#4Ym`)4!lq}>17APGVzD{Ac zN41(Mt>GOcFHFzwIivlWi6teU^H-Z&B+Hgk-iGv6Qa4qBS1Nz!u4ZLmWeo0FR)qL- zwxn`Mmms@wd_&n>_~mN)SolncnrAandA-a)RO>cs!&_SvMZ?;V!hmRAjPt0oEzXZ#@RK4}bRS1K~%OZ&QBP#`R*YROxTi>{|HEE=G~hl@!nq%(3j6 zpdVH8brVEf$lMCd&C14XPW~a>>G}xI*?CCVg=JiU-PQ0+{>_cuAgG&@fEKC{X92ph zBEMPATZc~{p$M}|X<{esJ^`LLxEs8aj>_l1`_F z&N|^F_3ym%NvhUHU`;)?3r>?tjxdo02i=4`s*9kkQ`ANsTKr(#qMtsnk=VUBANXd$ z9#ypmtHzb!9paN9LdG0Efx|Yj%9J0887QRjk$JVxaSW*4)VAHm$zNQ($`UcFDG<78 z{?D~hC>Cv8-TMNV(Q;N1>1f#SYb^Thgm)ugE;IpuCNDW>4_l!YjIgY)WgWiC{L)?1 z#R1>R`*dJgpeQ#80GKCclfC+iZr{3Ix!?r|aNqGTDp4_Z7u&F*aM0Xw)UEtZeNP?1 z@HhJ{v7Xj+91kMZ$k>PaZw0=-gp&vAX5Q=TW&n&t8DwbOne(%Un2*`IgW+HrDr9ls zMNgXIbD$1ArFJ9(NWg=ytTRI8qAn}OH9o6OGl3x|zCuSo^9!lM0#_9DsvU#R zMK%y#@e(kO;p|^cp^agN9H%v8UT5xKc_nJ$hT2a8)9gM{Xt^Vm;|pM@<6?V$wzrux ze-~$7x_o{nmH&le0MID*?F{xl#*ldCGh9A;l0g73b4`va>$I9@pO8G2CJyuT$) z>X*G5vt#-=iv|$QXJ+XU{ITj<5FU`_mS8`AlcySK(ShAjsZQBeKEA-94$9wIh6PTO{~Vmua(Xcj>5(62qLPzYvU zTtqX-c$=w(jhHoZJ>4~R^Ex|h%Mo?nlHgq&wK>p>viD8r#bM=fhHC}g`lQRVm2FZC zQQ9dQa$|s-2oKJp_yRtEdy^nD#S-@@uf^G$9IUaO%n#RhMG^{%6nn-jsmDrNiN{~I z^@qq!G8@RM9Z5D;DW}jxdnQEqWcl=a(k(eX?whi@oj>#9eDF?N;u|KP#^2Pt*)?Xvm#8@ zri$+wtL2qVO=;Jszrj_#wZX3TzAXyaU3&P-9%=~zB+L~}ZlT1jF4SzUEYWIyG{_$( z{Gbtog?Y|zYju0!;DD_1#X-B8{l5rlj)@`@zkkXFJ_9t59#FsEUZ{G4!m~({8tmY! z+O3QcdD)y;wlY)|8!5$fh+T6NU<7DTzW1YUMQ;W2$$UN~x*JdKS)Hoy%ziUcHFJC< z3s9Rd%qTlCv9q>61vl1hFAN3kr*h766Uo$7Dn_9ydCyDf6yp_cZ*#hMdL*~H_ihJX z3=mWcRBb0S|1PHJYBV7dwT{f>QCrkhqW_P{LYP5*i$H`n@7%?QCSVbnGWRG##c~RT zxJXAM9aVmO8l19uK@~A&=^x;WV#KN%NopF3CKlzhm=5_JiF{1_J{QbZM-J z;O<>>~(x`)f-rPWJ{EmX=wWhl%Zet=)krDNw7C&2sQIP+w9z-MN?~CV35dcIM;+ zDFvlnbgm=Y>^ci3^@m^V`PV?k=;}AQxnaRw{NH<1hmbTJGwJSZa zJS0)%DYrP`0YM#=dQn*=BFjhBAYtR8Ji`1Wv&d#~K0wy^~SwcEFX>(TC9g0#m2f8!H!_8i5;dxVz{=LLu-e!qi> z9ul>_UCzhNS%}>4x{l^ykt=-k6RvHpn{BZ_^iAr(3moj>oF({dWi)b7IR^9nIAHkCsAXVTIdLN~5~!B;IkG39@RJN_cLNVE(Cnrn zn>%2q;(HsKjcgpH3FzkpA=_{c=Dm*rq01md=N_vw!N_3E<7uaCsOy}>Q%b3aXJXFg zH-X`vF6d@@w?h+YOKAc>tEnGu81qU=z<`#9LsKtTzmoG~F#G?UguRJ@M zuUf$A!67eZ)b#0@XEtYf!$auhhUYvHc;!TcAXk5aoAydhUUn6zco(jmsg`0eE z=#3l#Iy1b2Dl5crw#(!um;&t3xqeLELhy4z>A>ATCdL=|2JLCh}Wc^VuZr6}Xy- zD_@D!{r56vLL6EtFh7qcY@~a6`YKvt)G5{}I2^vIG-bN8S-LUN?r*}y^{@yG4f@_M zqMPH^qchdq>t+QL-?8quVrnN?zMZU@Y^qsCjp0SHygd|buTnv zg$ZDPs!Eof0>u+r&-%iST$gfr%(QZTNr;<=nlW(8vA8`WV>a`CRtcU_v{*^9k4tl|z<2Ii@t0d3cHb z{rD^SzCjWKGf#Tbp^8<{HzIW}w@#eZe|C4mETzkxe{G5>v|s+ws6B)^q_1@}{!;_( zwDdr^agW>o-=_e8xE!X1lT?PLGn@01kKHd-C5{!C1^%@$Ka7|}4D0YVg~{ILJt?Bwez4#G@dZU6lJ`Qp9kH<&J1*RdVMfq9yd&5WiI(hg!*UjKn&(}{+iS1q7u4V3Wi9>fPFDrl{C$p#?_1qk#r3# zB8rV9uFI+c6b~?{ z1Ct!!qOWMoJvZ0}Oynee&i9p%nxSZ<(R-?nJMm&lbT8l8JD#{do@K)`^5OPV(A8yIaf|oH^X}g=lx+ap1l_F&sv&pQ+W2RH|o1ff#=VhtULiZ&BW=8AkkT7u~>tYj8M#-Se zrK#T^T{3948~y9x+^c@QemhiSKu)u$Z!*uhU{MY%bqZHn0`?c64i4B!^_3*`vK`)Z zqIg{>5+IWR$U}@=M69}Hk=Lk?3D?k``|YG3skSO*1)VHa_~A2o>wv93r%PR?g#~%c zJmG+pv-GElI9`0HHgUc~@_w-!<6^Y??6wo#x5krB9{V5c|Ru(g~0<(`=3||7Q!(YJ_!ETEK9s?|3|O6sN$?{Dft&;Da`rb zg7m)pTbsrF3%Fybk*@|!X+XZPXy)nS7;2$M6}}7lSlL#f=dKMxPOl=#NH1+%Tak3< zbo}p7Rx4Afuk<3}lSQTNbC^oCE${=$0kJu|h_vfdZ~HV;Bd1ep5G`0eWRWl~#S%G_ zSQtH+uxvNq6OuKSRkmC&0|9QTMeWidaHOcTeMk5tj)_9!U%rHK012CMH7%Ups`r@4#x3b$PVhqF4I0sF_TeK)^PY@@UWD0 zlmR{ux&Ext#;Qda$*dCoh+;GIMPv#MBzG{3ASnhbx;9qX3ZJr7%o;Qz3KNXoxbpZ_ zvIkN8bE&MWc1<-+p?LMj*FK{J+-+G>i^~tY zNtHR|czo-YM9ko$8Y8Mkz6%ERDn`QHB#ec^afcFU+qLQ%R`*8pr(v{~j|pwY;o6#M zl`wIcwtwpaG z&Qp_^1xZ}MCrc6G|HD_ZE0RVe+ijFRP(JbZZWYr7d#vQLeT37nnWv?igB=;&VYh{z z0lJ_ggKC4DAG1xm+KQUhNO9`yfP8a4BgUV^4E`agl2`$J({_S&adv78?@gDo5T@)> z++tdR1XZ2=@?`xjQzEYzfy^SV6Q737xxPogw=b0weXaiqybA9ebU3w>n`rN$sE~sL zE5rRX+KtjKA|{eZr9g-rIYrBASf7;l>r-~S%YvjE@zjuc84!Li~lRD%k z@+?J@4$me{{H`A7;IWJ}Pt7#H^^d&kG9U+DP1uWFGvSm$J&ck{Zhz35I2-FyYDzf@ z?An_3s45D9H#NVTGzG`)@~I1f2Sgg8S)gP?w%jubjB>SNY|)c-WQDAV#4)nd}!-bkuJ&Dtsn&(h9KZngw;74_35dn$>=-6?_u+TxrZxB5KL06PI5`_Gjb>D(v1#XiFzUJc?Ne`ciGPf;}LdJps&g9ltm2Ldt$ zH~k#{NX92LqOMehY<#<$wQ}_WBPZ$5F8OVI3hrb!p39bSx9o6hxLqk#cS*6dHdA-H zN1Kzg4Wn{l==ld{E~y*4*&zD$H7VT9bDm;gzj+MYZGF?Z-a50M#6W|L1Pe ziye?x|5Qwy7tC8ay8UOyX6AbJ*Hjm~{73A*g$NN0_cF$cNnXR<08 z0P)UT{Nr;?x?2&9a52Dd-GDp@u4Sp0{@}ek0xpGJwsyDElM3sZUZLNm7J=)J=`qlV z!l&>rt0$bWtcgLBtc)b2W!BVBJ(!jtzg~k&sNe&5de(J+N4qJs@~=$TU8q_aRhGb2ok8zljZ4OUHyho~u<|O`BZ=l460G7lIMqhn7}2nWN%RY)MT}g0qEN$N z{r)^D$`?uCLkqXJr77gb0ysqV9SI)|u|8~mehIis`YJv!aXsE^&D=2KBw782$23N3 z{s>_Xg_cgE+~W!&qQHmi{3)>wu(RugqVsp@V0@rP*K5Ykuz{9P*LLrU=)uT5Q~z6g zospg}Bms~;5Ci|Q?L>B}^x-$c-W*?b|B!;gxWVYBk}L=dHRinQN(9y?IyFgA~s)I?dr@id!_G~cRct{UlBaX-NDHMCv>1aE=+7fj{iDD{#>t}N5fug7;aFHoF zPkc*AyFB8rkD1=4><-7HMI%)Decu6U<3^xD; zQdhx|?5~ecxqZZ*T2yg_0568#Re!Ht;$IV%p|XCijdd`;p3ulhVMi1c#>8yH4Kmh! zk;pb0fz>wgGzV493<&NRPZg_=7o-W~8W-Vuf=RSU(Yj#h^V8o#Mubp1%M%i6u^U&i z*aTPOAu=0R&4KA+u7GWtpI$N4Z~xvVz)+p$3(e?(PQvEkZA4S$GD#xKo%MjUnP(>% zduH7&bp}+&K7A^K_@RSY)bu#HIZ|HCc|qVYBRii%W8%oSc4PrkKakFdn2_{qSW`MI zM8ok+rol4ys-?ToVF-mr7jV%6Q2r&1M{%PaPz$HKYKq?0Zp~#veO+oLM7+eGw8PTZ zo}8t6p@$iQVau}h?`r!sb>9Unw?MCJ?v^cTkOzc|~ zL%>=Z*`MV!qY1d+OOMRKrzcS&=ALEQi4Tv!a)73g!Ke3P4C!iSY57m!B%4Q%_ssl~ z!7izYU8`X9M%F`Q8t?Hc#8}c z>G_k@Dm)CYaf*M!^^^%=A0dYRVJl)N-dEFg`4t5A!_R2!1Ce=aw$h5+RWH1~^EY9A zXBW0tbwP2R7$V$@w5~?KUk5~;fzr>6>ASQ!rsY(qL;O{D7f3a=ZVo9bu0wMKrW@B=dH8lDQrzTeD z=aRVHpmO4@;ia*>uP2b{7WkAttE^xJOB}=qWYr7%*WXB-k8#&`bl7GLF;$+(bj!cgJ2 zs!v~wL^AXfxAX4CsHaLVVdL3^#IsE=ll8>##&H^dIeV%(Tlq44-3_gJ=8A zW7G$INfcsfbGSQ3Tt{N)tXhmGioT^L>Tw+)?F1;IvNXT;7Td|>q*up;Yh+CIi&lyE zm_nLd9Si6XTJ4`jEm#P)Zd<`~)u1;&!?txm!-x!NkogOCQx;07I0a;f2n4_lUz2wK z1+ULi?P`|S(TN#I6&jSk6@+x8h0r`OHRZ_Hr&Y#O98Qdb3O;VNJb-LNH5<&)Muofm zph%<2=7xOU||r&fe@abY^0tzaLIYdaf>frhaC8jKUQg&Pg1?r zpZ$O)U|`vd5q@_EN!l?VHk{MLF2)K4Y}{{&Z|_Cr+Z!g-4)C8dkzboXQv)DkURJ!n z<3jHNgYc&C>j@WV0|d;f+m3YCWn9LBO5VRe-0e z*n&6a*+OC5mYbb_Y)TWpnhXWJya4(WQF^Zkc%sgH5-aRPDbJ4|U`r@^3|Ia${j|yh3AT(X3Xx3K`RQ zM`V7aB}%dTy50mUaDxAEjv5BBP|DeshnCE8IsO#H7 z1)@mYl66r;)Orw`JO|!HMv>wg!H@~_Hg45LBT}{wG{|=YF|HKZOzOhq4S_sNg`8Us zTO--diR;tkg+HO4m_%YEpa5Y0(+S zLu40v`Rr19ayleh@#_mFAayGMT6=Vz0SYn`Yu4$Ga=+nk!s05#r=3-?iUBS%+ibMi zUS5=v_WVjPsPxcp_-#qy$-5FD?8OL=DwfsV6u{~t97nsmc-Vo+Wg3J{gB@NiA~tV8 zA=<9oY5ihfm8>&%JERpTEG9JCV-apznl*-fGymQ}jn~ipfz@3;VR2f74Rd5UCtyei z3B~F=p(z8`otrSr=o}KWtmyjK-7}NM{EyAwT7*1Ns^|<^*kiI@%dt3vtby=+uejDD zd%v*k_TIowU;1|8`y&R!lsU{z^BuZhr+{P~v4^=~artvGahB;yuf_!4oFZDvd z0w#a~r&I8eJZc%KSh{8hWI=$qySuGrO{m5rWQkSabWJBwaPoz`Ee>55CjqaBbReFE zmYTOay1t-L@Vqp2sF9$}!_3l!Lb7Np{Xu;7;~dweOQ%tjOhuxp6Psr;9%k9bJa@l> zwrez`S1WJ}ro(hUajUfHb%Xr&I)^2%J+m$5)C5T&UPuU5^cY9RzCCt@evUwk(E2uY zu65Ic2KG+mP4BzDPhjr%wAO}p*$pGBYqYA>`D(54bL1a-yOYP_U?7lU<{8G13CEN+ zp-s41N)jn7VFxytH8pN3j=7n@+)G@^hSxEoE(~tWE7!1B!8YJwqcA3SPFgZMZ{=7Q zS%Qq*>*;jpvTY>#Y{W;SY1ndax-=<{K(p#2wPNJ)_7#uxSNtXM7!X? zYVb1Oq6HHYRL(CylFjEZ^sRRh>^sINNV`$r74=W~09&9oQ=U3!a+1DHpE^ zAk8(hr!-se$sdeRQvXcuc^SwsP-PP4YW$grNmLzNp# zy(d}_C24F$n61<}oA$PBM#fng6grM|X8kwx<|k%-;mnCh*vW)RjDM%RN%Qr;&DC0R z5dSlk0D!2vq*&*FsJn$J03azz_20AK-~ePG5CG6W{(mYK5ZHgI>OYMAKUnu4ruZKj z;C~ne`2WaTgn|B7{-47C7Kwk?|LFPO6dVAEhX8>7<1jEWG5{s~FAVfg10er@_>2q; eK>7bm + +### 1.1. Add below dependencies in pom.xml file. + + + // we'll use this dependency to create RESTful API endpoints, + // handle HTTP requests (GET, POST, PUT, DELETE), and return JSON responses. + + org.springframework.boot + spring-boot-starter-web + + + // we'll use this dependency to interact with a database, + // define JPA entities (data models), perform CRUD operations, + // and execute custom database queries. + + org.springframework.boot + spring-boot-starter-data-jpa + + + // we'll use this dependency to establish a connection to + // our MySQL database, execute SQL queries, and manage database transactions. + + mysql + mysql-connector-java + 8.0.33 + runtime + + + // we'll use Lombok annotations (such as @Data, @Getter, @Setter) + // in our Java classes to automatically generate common methods, + // making your code cleaner and more concise. + + org.projectlombok + lombok + true + + + // we'll use this dependency to annotate your Java model classes + // with validation constraints (e.g., @NotBlank, @NotNull, @Size) + // and automatically validate request data in your RESTful API endpoints. + + org.springframework.boot + spring-boot-starter-validation + + + + + +### 1.2. Update application.properties file +spring.jpa.hibernate.ddl-auto=update +spring.datasource.url=jdbc:mysql://localhost:3306/usercrud +spring.datasource.username=your localhost username +spring.datasource.password=your localhost password +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + + +## Step 2: Create project structure. + +- Create below folder structure inside src folder. We’ll travel through each file one by one. + + + +## Step 3: Create User Model + +- Models define the structure and attributes of the data entities that the application manages. + +- For example, a User model might include attributes like id, username, email, and password. + +- Models often include annotations or custom logic to validate the data before it is persisted to the database. For example, you might use annotations like `@NotBlank`, `@Email`, or `@Size` to enforce constraints on the data. + +- Models are typically mapped to database tables using Object-Relational Mapping (ORM) frameworks like Hibernate in Spring Boot applications. They define the structure of the database tables and establish relationships between entities. + +```java +// User.java + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(uniqueConstraints = { + @UniqueConstraint(columnNames = "username"), + @UniqueConstraint(columnNames = "email") +}) +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotBlank + @Size(min=3, max = 20) + private String username; + + @NotBlank + @Email + private String email; + + @NotBlank + @Size(min=10, max = 10) + private String phone; + + private LocalDateTime regDateAndTime; + +} +``` + +## Step 4: Create DTO classes + +- DTOs (Data Transfer Objects) play a crucial role in Spring Boot CRUD applications by providing a flexible and efficient mechanism for transferring data between layers (Client and Server), optimizing performance, encapsulating business logic, ensuring compatibility, and enhancing security and privacy. + +```java +// ApiResponseDto.java + +@Data +@AllArgsConstructor +public class ApiResponseDto { + private String status; + private T response; + +} + +// ApiResponseStatus.java + +public enum ApiResponseStatus { + SUCCESS, + FAIL +} + +// UserRegistrationDTO.java + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserRegistrationDTO { + + @NotBlank(message = "Username is required!") + @Size(min= 3, message = "Username must have atleast 3 characters!") + @Size(max= 20, message = "Username can have have atmost 20 characters!") + private String userName; + + @Email(message = "Email is not in valid format!") + @NotBlank(message = "Email is required!") + private String email; + + @NotBlank(message = "Phone number is required!") + @Size(min = 10, max = 10, message = "Phone number must have 10 characters!") + @Pattern(regexp="^[0-9]*$", message = "Phone number must contain only digits") + private String phone; + +} +``` + +## Step 5: Create Exception classes + +- Custom exceptions help to improve the clarity and maintainability of the code by providing specific error handling for common scenarios encountered in a CRUD application. +- They allow developers to handle exceptional cases gracefully and communicate errors effectively. + +```java +// UserNotFoundException.java + +// This exception is thrown when attempting to retrieve a user from the database, but the user does not exist. +public class UserNotFoundException extends Exception{ + public UserNotFoundException(String message) { + super(message); + } +} + + +// UserAlreadyExistsException.java + +// This exception is thrown when attempting to create a new user, but a user with the same identifier (e.g., username, email) already exists in the database. +public class UserAlreadyExistsException extends Exception{ + public UserAlreadyExistsException(String message) { + super(message); + } +} + + +// UserServiceLogicException.java + +// This exception serves as a generic exception for any unexpected errors or business logic violations that occur within the user service layer. +public class UserServiceLogicException extends Exception{ + public UserServiceLogicException() { + super("Something went wrong. Please try again later!"); + } +} +``` + +## Step 6: Create User Repository Interface + +- Repository interfaces abstract the details of data access. Instead of directly interacting with data storage mechanisms (such as databases), you define repository interfaces to declare methods for common CRUD (Create, Read, Update, Delete) operations. + +- JpaRepository is a part of Spring Data JPA and provides CRUD (Create, Read, Update, Delete) operations for the User entity. + +- The first generic parameter User specifies the entity class that this repository manages, implying that User is an entity class. + +- The second generic parameter Integer specifies the type of the primary key of the User entity. + +```java +// UserRepository.java + +@Repository +public interface UserRepository extends JpaRepository { + + // Developers can define methods in repository interfaces with custom query keywords, + // and Spring Data JPA automatically translates them into appropriate SQL queries. + User findByEmail(String email); + + User findByUsername(String userName); + + List findAllByOrderByRegDateTimeDesc(); + +} +``` + +- By extending JpaRepository, UserRepository inherits methods for performing various database operations such as saving, deleting, finding, etc., without needing to write these methods explicitly. These methods are provided by Spring Data JPA based on the naming convention of the methods in the repository interface. + +## Step 7: Create User Service class + +- Service classes in Spring Boot CRUD applications serve as the backbone for implementing business logic, managing transactions, abstracting data access, centralizing business rules, promoting reusability, and handling errors effectively. + +- By placing business logic within service classes, you centralize the rules governing your application’s behavior. This makes it easier to maintain and modify the behavior of your application without having to hunt down logic scattered across different parts of the codebase. + +```java +@Service +public interface UserService { + + ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) + throws UserAlreadyExistsException, UserServiceLogicException; + + ResponseEntity> getAllUsers() + throws UserServiceLogicException; + + ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) + throws UserNotFoundException, UserServiceLogicException; + + ResponseEntity> deleteUser(int id) + throws UserServiceLogicException, UserNotFoundException; + +} +``` + +```java +@Component +@Slf4j +public class UserServiceImpl implements UserService{ + + @Autowired + private UserRepository userRepository; + + @Override + public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) + throws UserAlreadyExistsException, UserServiceLogicException { + + // logic to register user + } + + @Override + public ResponseEntity> getAllUsers() throws UserServiceLogicException { + // logic to get all users + } + + @Override + public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) + throws UserNotFoundException, UserServiceLogicException { + // logic to update user + } + + @Override + public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { + // logic to delete user + } +} +``` + +- Now let’s see how we can implement each of the methods in UserServiceImpl separately. + +```java +@Override + public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) + throws UserAlreadyExistsException, UserServiceLogicException { + + try { + if (userRepository.findByEmail(newUserDetails.getEmail()) != null){ + throw new UserAlreadyExistsException("Registration failed: User already exists with email " + newUserDetails.getEmail()); + } + if (userRepository.findByUsername(newUserDetails.getUserName()) != null){ + throw new UserAlreadyExistsException("Registration failed: User already exists with username " + newUserDetails.getUserName()); + } + + User newUser = new User( + newUserDetails.getUserName(), newUserDetails.getEmail(), newUserDetails.getPhone(), LocalDateTime.now() + ); + + // save() is an in built method given by JpaRepository + userRepository.save(newUser); + + return ResponseEntity + .status(HttpStatus.CREATED) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "New user account has been successfully created!")); + + }catch (UserAlreadyExistsException e) { + throw new UserAlreadyExistsException(e.getMessage()); + }catch (Exception e) { + log.error("Failed to create new user account: " + e.getMessage()); + throw new UserServiceLogicException(); + } + } +@Override + public ResponseEntity> getAllUsers() throws UserServiceLogicException { + try { + List users = userRepository.findAllByOrderByRegDateTimeDesc(); + + return ResponseEntity + .status(HttpStatus.OK) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), users) + ); + + }catch (Exception e) { + log.error("Failed to fetch all users: " + e.getMessage()); + throw new UserServiceLogicException(); + } + } +@Override + public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) + throws UserNotFoundException, UserServiceLogicException { + try { + User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); + + user.setEmail(newUserDetails.getEmail()); + user.setUsername(newUserDetails.getUserName()); + user.setPhone(newUserDetails.getPhone()); + + userRepository.save(user); + + return ResponseEntity + .status(HttpStatus.OK) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account updated successfully!") + ); + + }catch(UserNotFoundException e){ + throw new UserNotFoundException(e.getMessage()); + }catch(Exception e) { + log.error("Failed to update user account: " + e.getMessage()); + throw new UserServiceLogicException(); + } + } +@Override + public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { + try { + User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); + + userRepository.delete(user); + + return ResponseEntity + .status(HttpStatus.OK) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account deleted successfully!") + ); + } catch (UserNotFoundException e) { + throw new UserNotFoundException(e.getMessage()); + } catch (Exception e) { + log.error("Failed to delete user account: " + e.getMessage()); + throw new UserServiceLogicException(); + } + } +``` + +Note: + +- The `@Service` annotation is used to indicate that a class is a service component in the Spring application context. + +- The `@Component` annotation is a generic stereotype annotation used to indicate that a class is a Spring component. Components annotated with @Component are candidates for auto-detection when using Spring's component scanning feature. + +- The `@Autowired` annotation is used to automatically inject dependencies into Spring-managed beans. When Spring encounters a bean annotated with @Autowired, it looks for other beans in the application context that match the type of the dependency and injects it. + +- The `@Slf4j` annotation is not a standard Spring annotation but rather a Lombok annotation used for logging. + +## Step 8: Create controller + +- A controller class in a Spring Boot application is responsible for handling incoming HTTP requests and returning appropriate HTTP responses. + +- It serves as an entry point for processing client requests and often delegates the actual business logic to service classes. + +- A controller class is typically annotated with @RestController or @Controller. +Inside the controller class, you define methods that handle specific HTTP requests. These methods are annotated with `@RequestMapping`, `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, or other similar annotations to specify the HTTP method and the URL path that the method should respond to. + +- Each method in the controller class represents a particular endpoint of the REST API. + +- Controller classes often rely on service classes to perform business logic. Dependencies on these service classes are typically injected using the @Autowired annotation or constructor injection. + +- Controller methods return the response to the client. This can be done by returning a ResponseEntity object to have more control over the response status code, headers, and body. + +```java +@RestController +@RequestMapping("/users") +public class UserController { + + @Autowired + public UserService userService; + + @PostMapping("/new") + public ResponseEntity> registerUser(@Valid @RequestBody UserDetailsRequestDto userDetailsRequestDto) throws UserAlreadyExistsException, UserServiceLogicException { + return userService.registerUser(userDetailsRequestDto); + } + + @GetMapping("/get/all") + public ResponseEntity> getAllUsers() throws UserServiceLogicException { + return userService.getAllUsers(); + } + + @PutMapping("/update/{id}") + public ResponseEntity> updateUser(@Valid @RequestBody UserDetailsRequestDto userDetailsRequestDto, @PathVariable int id) + throws UserNotFoundException, UserServiceLogicException { + return userService.updateUser(userDetailsRequestDto, id); + } + + @DeleteMapping("/delete/{id}") + public ResponseEntity> deleteUser(@PathVariable int id) + throws UserNotFoundException, UserServiceLogicException { + return userService.deleteUser(id); + } + +} +``` + +Note: + +- The `@PathVariable` annotation is used to extract values from the URI template of the incoming request. E.g., updateUser method. + +- The `@RequestParam` annotation is used to extract query parameters from the URL of the incoming request. + +- The `@RequestBody` annotation is used to extract the request body of the incoming HTTP request. It binds the body of the request to a method parameter in a controller method, typically for POST, PUT, and PATCH requests. E.g., registerUser method. + +## Step 9: Create Exception Handler class + +- Exception handlers in Spring Boot applications are used to handle exceptions thrown during the processing of HTTP requests. + +- They allow you to centralize error handling logic and provide custom responses to clients when errors occur. + +- `@RestControllerAdvice` annotation is used to indicate that the class contains advice that applies to all controllers. This advice will be applied globally to handle exceptions thrown from any controller in the application. + +- To create an exception handler, you annotate a method within a controller class with @ExceptionHandler and specify the type(s) of exceptions it can handle. + +```java +// UserServiceExceptionHandler.java + +@RestControllerAdvice +public class UserServiceExceptionHandler { + + @ExceptionHandler(value = UserNotFoundException.class) + public ResponseEntity> UserNotFoundExceptionHandler(UserNotFoundException exception) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); + } + + @ExceptionHandler(value = UserAlreadyExistsException.class) + public ResponseEntity> UserAlreadyExistsExceptionHandler(UserAlreadyExistsException exception) { + return ResponseEntity.status(HttpStatus.CONFLICT).body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); + } + + @ExceptionHandler(value = UserServiceLogicException.class) + public ResponseEntity> UserServiceLogicExceptionHandler(UserServiceLogicException exception) { + return ResponseEntity.badRequest().body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); + } + + @ExceptionHandler(value = MethodArgumentNotValidException.class) + public ResponseEntity> MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException exception) { + + List errorMessage = new ArrayList<>(); + + exception.getBindingResult().getFieldErrors().forEach(error -> { + errorMessage.add(error.getDefaultMessage()); + }); + return ResponseEntity.badRequest().body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), errorMessage.toString())); + } + +} +``` + +## Step 10: Run your application and test with postman/frontend😊. + +Register user failed: User details invalid! + + +Register user successful + + +Retrieve all users + + +Update the details of John + + +Delete user john + + +Hey guys, that’s it. We have successfully developed rest crud API for a user management system. \ No newline at end of file From 82ce06858a3279984a6b64754f02ab808f0b9297 Mon Sep 17 00:00:00 2001 From: Dharshi Balasubramaniyam <139672976+DharshiBalasubramaniyam@users.noreply.github.com> Date: Tue, 25 Jun 2024 09:18:38 +0530 Subject: [PATCH 2/5] Update index.md --- .../index.md | 187 ++++++++++-------- 1 file changed, 100 insertions(+), 87 deletions(-) diff --git a/blog/Building RESTful CRUD API in springboot/index.md b/blog/Building RESTful CRUD API in springboot/index.md index ba4927718..8c7b80afa 100644 --- a/blog/Building RESTful CRUD API in springboot/index.md +++ b/blog/Building RESTful CRUD API in springboot/index.md @@ -56,6 +56,7 @@ Motive of this article ### 1.1. Add below dependencies in pom.xml file. +``` // we'll use this dependency to create RESTful API endpoints, // handle HTTP requests (GET, POST, PUT, DELETE), and return JSON responses. @@ -99,15 +100,18 @@ Motive of this article +``` ### 1.2. Update application.properties file + +``` spring.jpa.hibernate.ddl-auto=update spring.datasource.url=jdbc:mysql://localhost:3306/usercrud spring.datasource.username=your localhost username spring.datasource.password=your localhost password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver - +``` ## Step 2: Create project structure. @@ -331,92 +335,101 @@ public class UserServiceImpl implements UserService{ ```java @Override - public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) - throws UserAlreadyExistsException, UserServiceLogicException { +public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) + throws UserAlreadyExistsException, UserServiceLogicException { - try { - if (userRepository.findByEmail(newUserDetails.getEmail()) != null){ - throw new UserAlreadyExistsException("Registration failed: User already exists with email " + newUserDetails.getEmail()); - } - if (userRepository.findByUsername(newUserDetails.getUserName()) != null){ - throw new UserAlreadyExistsException("Registration failed: User already exists with username " + newUserDetails.getUserName()); - } - - User newUser = new User( - newUserDetails.getUserName(), newUserDetails.getEmail(), newUserDetails.getPhone(), LocalDateTime.now() - ); - - // save() is an in built method given by JpaRepository - userRepository.save(newUser); - - return ResponseEntity - .status(HttpStatus.CREATED) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "New user account has been successfully created!")); - - }catch (UserAlreadyExistsException e) { - throw new UserAlreadyExistsException(e.getMessage()); - }catch (Exception e) { - log.error("Failed to create new user account: " + e.getMessage()); - throw new UserServiceLogicException(); + try { + if (userRepository.findByEmail(newUserDetails.getEmail()) != null){ + throw new UserAlreadyExistsException("Registration failed: User already exists with email " newUserDetails.getEmail()); + } + if (userRepository.findByUsername(newUserDetails.getUserName()) != null){ + throw new UserAlreadyExistsException("Registration failed: User already exists with username " newUserDetails.getUserName()); } - } -@Override - public ResponseEntity> getAllUsers() throws UserServiceLogicException { - try { - List users = userRepository.findAllByOrderByRegDateTimeDesc(); - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), users) - ); + User newUser = new User( + newUserDetails.getUserName(), newUserDetails.getEmail(), newUserDetails.getPhone(), LocalDateTime.no() + ); - }catch (Exception e) { - log.error("Failed to fetch all users: " + e.getMessage()); - throw new UserServiceLogicException(); - } - } -@Override - public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) - throws UserNotFoundException, UserServiceLogicException { - try { - User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); + // save() is an in built method given by JpaRepository + userRepository.save(newUser); - user.setEmail(newUserDetails.getEmail()); - user.setUsername(newUserDetails.getUserName()); - user.setPhone(newUserDetails.getPhone()); + return ResponseEntity + .status(HttpStatus.CREATED) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "New user account has been successfully created!")); - userRepository.save(user); + }catch (UserAlreadyExistsException e) { + throw new UserAlreadyExistsException(e.getMessage()); + }catch (Exception e) { + log.error("Failed to create new user account: " + e.getMessage()); + throw new UserServiceLogicException(); + } +} +``` - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account updated successfully!") - ); +```java +@Override +public ResponseEntity> getAllUsers() throws UserServiceLogicException { + try { + List users = userRepository.findAllByOrderByRegDateTimeDesc(); + + return ResponseEntity + .status(HttpStatus.OK) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), users) + ); + + }catch (Exception e) { + log.error("Failed to fetch all users: " + e.getMessage()); + throw new UserServiceLogicException(); + } +} +``` - }catch(UserNotFoundException e){ - throw new UserNotFoundException(e.getMessage()); - }catch(Exception e) { - log.error("Failed to update user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } +```java +@Override +public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) + throws UserNotFoundException, UserServiceLogicException { + try { + User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); + + user.setEmail(newUserDetails.getEmail()); + user.setUsername(newUserDetails.getUserName()); + user.setPhone(newUserDetails.getPhone()); + + userRepository.save(user); + + return ResponseEntity + .status(HttpStatus.OK) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account updated successfully!") + ); + + }catch(UserNotFoundException e){ + throw new UserNotFoundException(e.getMessage()); + }catch(Exception e) { + log.error("Failed to update user account: " + e.getMessage()); + throw new UserServiceLogicException(); + } } +``` + +```java @Override - public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { - try { - User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); - - userRepository.delete(user); - - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account deleted successfully!") - ); - } catch (UserNotFoundException e) { - throw new UserNotFoundException(e.getMessage()); - } catch (Exception e) { - log.error("Failed to delete user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } +public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { + try { + User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); + + userRepository.delete(user); + + return ResponseEntity + .status(HttpStatus.OK) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account deleted successfully!") + ); + } catch (UserNotFoundException e) { + throw new UserNotFoundException(e.getMessage()); + } catch (Exception e) { + log.error("Failed to delete user account: " + e.getMessage()); + throw new UserServiceLogicException(); } +} ``` Note: @@ -532,19 +545,19 @@ public class UserServiceExceptionHandler { ## Step 10: Run your application and test with postman/frontend😊. -Register user failed: User details invalid! - +Register user failed: User details invalid!
+

-Register user successful - +Register user successful
+

-Retrieve all users - +Retrieve all users
+

-Update the details of John - +Update the details of John
+

-Delete user john - +Delete user john
+

-Hey guys, that’s it. We have successfully developed rest crud API for a user management system. \ No newline at end of file +Hey guys, that’s it. We have successfully developed rest crud API for a user management system. From 7a876a481e05920ca2c3e070b1db38e724d2ddc5 Mon Sep 17 00:00:00 2001 From: Ajay Dhangar <99037494+Ajay-Dhangar@users.noreply.github.com> Date: Tue, 25 Jun 2024 10:35:11 +0530 Subject: [PATCH 3/5] Update index.md --- .../index.md | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/blog/Building RESTful CRUD API in springboot/index.md b/blog/Building RESTful CRUD API in springboot/index.md index 8c7b80afa..600e82c43 100644 --- a/blog/Building RESTful CRUD API in springboot/index.md +++ b/blog/Building RESTful CRUD API in springboot/index.md @@ -432,8 +432,7 @@ public ResponseEntity> deleteUser(int id) throws UserServiceLo } ``` -Note: - +:::note - The `@Service` annotation is used to indicate that a class is a service component in the Spring application context. - The `@Component` annotation is a generic stereotype annotation used to indicate that a class is a Spring component. Components annotated with @Component are candidates for auto-detection when using Spring's component scanning feature. @@ -441,6 +440,7 @@ Note: - The `@Autowired` annotation is used to automatically inject dependencies into Spring-managed beans. When Spring encounters a bean annotated with @Autowired, it looks for other beans in the application context that match the type of the dependency and injects it. - The `@Slf4j` annotation is not a standard Spring annotation but rather a Lombok annotation used for logging. +::: ## Step 8: Create controller @@ -545,19 +545,27 @@ public class UserServiceExceptionHandler { ## Step 10: Run your application and test with postman/frontend😊. -Register user failed: User details invalid!
-

+Register user failed: User details invalid! + + + +Register user successful + + + + +Retrieve all users + + + + +Update the details of John -Register user successful
-

+ -Retrieve all users
-

-Update the details of John
-

+Delete user john -Delete user john
-

+ Hey guys, that’s it. We have successfully developed rest crud API for a user management system. From 59a7e18e58b06b6fce18aabfbc004ce437ecc329 Mon Sep 17 00:00:00 2001 From: Ajay Dhangar <99037494+Ajay-Dhangar@users.noreply.github.com> Date: Tue, 25 Jun 2024 10:36:20 +0530 Subject: [PATCH 4/5] Update index.md --- blog/Building RESTful CRUD API in springboot/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/blog/Building RESTful CRUD API in springboot/index.md b/blog/Building RESTful CRUD API in springboot/index.md index 600e82c43..124b08297 100644 --- a/blog/Building RESTful CRUD API in springboot/index.md +++ b/blog/Building RESTful CRUD API in springboot/index.md @@ -490,13 +490,14 @@ public class UserController { } ``` -Note: +:::note - The `@PathVariable` annotation is used to extract values from the URI template of the incoming request. E.g., updateUser method. - The `@RequestParam` annotation is used to extract query parameters from the URL of the incoming request. - The `@RequestBody` annotation is used to extract the request body of the incoming HTTP request. It binds the body of the request to a method parameter in a controller method, typically for POST, PUT, and PATCH requests. E.g., registerUser method. +::: ## Step 9: Create Exception Handler class From 692661beca7c1b7680667bd56d95703fafd97719 Mon Sep 17 00:00:00 2001 From: Ajay Dhangar <99037494+Ajay-Dhangar@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:57:14 +0530 Subject: [PATCH 5/5] solved img tag issue --- .../index.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/blog/Building RESTful CRUD API in springboot/index.md b/blog/Building RESTful CRUD API in springboot/index.md index 124b08297..cadf6a642 100644 --- a/blog/Building RESTful CRUD API in springboot/index.md +++ b/blog/Building RESTful CRUD API in springboot/index.md @@ -52,7 +52,7 @@ Motive of this article - Visit spring initializer and fill in all the details accordingly and at last click on the GENERATE button. Extract the zip file and import it into your IDE. - + ![img-03](./images/image01.png) ### 1.1. Add below dependencies in pom.xml file. @@ -117,7 +117,7 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver - Create below folder structure inside src folder. We’ll travel through each file one by one. - + ![img-03](./images/image02.png) ## Step 3: Create User Model @@ -548,25 +548,24 @@ public class UserServiceExceptionHandler { Register user failed: User details invalid! - +![img-03](./images/image03.png) Register user successful - +![img-04](./images/image04.png) Retrieve all users - +![img-05](./images/image05.png) Update the details of John - - +![img-06](./images/image06.png) Delete user john - +![img-07](./images/image07.png) Hey guys, that’s it. We have successfully developed rest crud API for a user management system.