package Ġorg . springframework . samples . pet clin ic . owner Ċ Ċ import Ġorg . springframework . beans . factory . annotation . Autowired ; Ċ import Ġorg . springframework . samples . pet clin ic . visit . Visit ; Ċ import Ġorg . springframework . samples . pet clin ic . visit . Visit Repository ; Ċ import Ġorg . springframework . stereotype . Controller ; Ċ import Ġorg . springframework . validation . Binding Result ; Ċ import Ġorg . springframework . web . bind . Web Data Binder ; Ċ import Ġorg . springframework . web . bind . annotation .*; Ċ Ċ import Ġjavax . validation . Valid ; ĊĊ Ċ @ Controller Ċ class ĠVisit Controller ( val Ġvis its : ĠVisit Repository , Ġval Ġp ets : ĠPet Repository ) Ġ{ ĊĊĠĠĠ Ġ@ Init Binder ĊĠĠĠ Ġfun Ġset Allowed Fields ( data Binder : ĠWeb Data Binder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Binder . set Dis allowed Fields (" id ") ĊĠĠĠ Ġ} ĊĊĠĠĠĠĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġbefore Ġeach Ġand Ġevery Ġ@ RequestMapping Ġannotated Ġmethod . ĊĠĠĠĠ Ġ* Ġ 2 Ġgoals : ĊĠĠĠĠ Ġ* Ġ- ĠMake Ġsure Ġwe Ġalways Ġhave Ġfresh Ġdata ĊĠĠĠĠ Ġ* Ġ- ĠSince Ġwe Ġdo Ġnot Ġuse Ġthe Ġsession Ġscope , Ġmake Ġsure Ġthat ĠPet Ġobject Ġalways Ġhas Ġan Ġid ĊĠĠĠĠ Ġ* Ġ( Even Ġthough Ġid Ġis Ġnot Ġpart Ġof Ġthe Ġform Ġfields ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpet Id ĊĠĠĠĠ Ġ* Ġ@ return ĠPet ĊĠĠĠĠ Ġ*/ Ċ ĉ @ Model Attribute (" visit ") ĊĠĠĠ Ġfun Ġload Pet With Visit (@ PathVariable (" pet Id ") Ġpet Id : ĠInt , Ġmodel : ĠMutable Map < String , ĠAny >): ĠVisit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpet Ġ= Ġp ets . findById ( pet Id ) ĊĠĠĠĠĠĠĠ Ġmodel . put (" pet ", Ġpet ) ĊĠĠĠĠĠĠĠ Ġval Ġvisit Ġ= ĠVisit () ĊĠĠĠĠĠĠĠ Ġpet . add Visit ( visit ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvisit ĊĠĠĠ Ġ} ĊĉĊ ĉ // ĠSpring ĠMVC Ġcalls Ġmethod Ġload Pet With Visit (...) Ġbefore Ġinit New Visit Form Ġis Ġcalled ĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ"/ owners /*/ pe ts /{ pet Id }/ vis its / new ") ĊĠĠĠ Ġfun Ġinit New Visit Form (@ PathVariable (" pet Id ") Ġpet Id : ĠInt , Ġmodel : ĠMap < String , ĠAny >): ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġ" pe ts / create OrUpdate Visit Form " ĊĊĠĠĠ Ġ// ĠSpring ĠMVC Ġcalls Ġmethod Ġload Pet With Visit (...) Ġbefore Ġprocess New Visit Form Ġis Ġcalled ĊĠĠĠ Ġ@ PostMapping ( value Ġ= Ġ"/ owners /{ owner Id }/ pe ts /{ pet Id }/ vis its / new ") ĊĠĠĠ Ġfun Ġprocess New Visit Form (@ Valid Ġvisit : ĠVisit , Ġresult : ĠBinding Result ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result . has Errors ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pe ts / create OrUpdate Visit Form " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvis its . save ( visit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" redirect :/ owners /{ owner Id }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠ Ċ }