માન્યતા સંદેશાઓના સ્થાને વસંત બુટમાં "આંતરિક સર્વર ભૂલ" નો ઉપયોગ કરવો

માન્યતા સંદેશાઓના સ્થાને વસંત બુટમાં આંતરિક સર્વર ભૂલ નો ઉપયોગ કરવો
માન્યતા સંદેશાઓના સ્થાને વસંત બુટમાં આંતરિક સર્વર ભૂલ નો ઉપયોગ કરવો

વસંત બૂટમાં કસ્ટમ માન્યતા ભૂલો કેમ દેખાતી નથી

સ્પ્રિંગ બૂટ એપ્લિકેશન બનાવતી વખતે કે જે વપરાશકર્તા નોંધણીનું સંચાલન કરે છે, વિકાસકર્તાઓ ઘણીવાર ડેટા અખંડિતતાને સુનિશ્ચિત કરવા માટે માન્યતા એનોટેશન પર આધાર રાખે છે. આ માન્યતા એ સુનિશ્ચિત કરવામાં મદદ કરે છે કે પ્રથમ નામ, છેલ્લું નામ અને ઇમેઇલ જેવા જરૂરી ફીલ્ડ્સ ખાલી ન રહે. જો કે, જ્યારે માન્યતા ભૂલો વપરાશકર્તાને યોગ્ય રીતે દર્શાવવામાં આવતી નથી ત્યારે સમસ્યાઓ ઊભી થઈ શકે છે, પરિણામે સામાન્ય "આંતરિક સર્વર ભૂલ" થાય છે.

આ સમસ્યા સામાન્ય રીતે નિયંત્રકમાં ખોટા એરર હેન્ડલિંગને કારણે ઉદ્ભવે છે, જ્યાં બંધનકર્તા પરિણામો યોગ્ય રીતે પ્રક્રિયા કરી શકાતા નથી. જો તમે ચોક્કસ ભૂલ સંદેશાઓની અપેક્ષા રાખતા હોવ જેમ કે "પ્રથમ નામ નલ હોઈ શકતું નથી," પરંતુ તેના બદલે 500 ભૂલ પ્રાપ્ત થાય છે, તો સંભવતઃ તમારી માન્યતા કેવી રીતે લાગુ કરવામાં આવી રહી છે તેમાં સમસ્યા છે.

આ સમસ્યાને ઉકેલવા માટે, તે ખાતરી કરવા માટે નિર્ણાયક છે કે માન્યતા એનોટેશન જેમ કે @NotNull અને @NotBlank યોગ્ય રીતે પ્રક્રિયા કરવામાં આવે છે અને તે ભૂલ પ્રતિસાદો કેપ્ચર કરવામાં આવે છે અને વપરાશકર્તા-મૈત્રીપૂર્ણ ફોર્મેટમાં પરત કરવામાં આવે છે. વધુમાં, હેન્ડલ કરવા માટે તમારા નિયંત્રકમાં યોગ્ય ગોઠવણી બંધનકર્તા પરિણામ ભૂલો જરૂરી છે.

આ લેખમાં, અમે અન્વેષણ કરીશું કે સ્પ્રિંગ બૂટ એપ્લિકેશન્સમાં આવી સમસ્યાઓ શા માટે આવે છે અને તમે તેને કેવી રીતે ઠીક કરી શકો છો. અમે ભૂલના સંચાલનમાં સામાન્ય ક્ષતિઓની તપાસ કરીશું અને જ્યારે માન્યતા નિષ્ફળ જાય ત્યારે "આંતરિક સર્વર ભૂલ" ટાળવા માટે શ્રેષ્ઠ પ્રથાઓમાંથી પસાર થઈશું.

આદેશ ઉપયોગનું ઉદાહરણ
@RestControllerAdvice આ ટીકાનો ઉપયોગ સ્પ્રિંગ બૂટમાં વૈશ્વિક અપવાદ હેન્ડલરને વ્યાખ્યાયિત કરવા માટે થાય છે. તે તમને દરેક નિયંત્રકમાં વ્યક્તિગત રીતે હેન્ડલ કરવાને બદલે સમગ્ર એપ્લિકેશન માટે અપવાદોને કેન્દ્રિય રીતે હેન્ડલ કરવાની મંજૂરી આપે છે.
@ExceptionHandler(MethodArgumentNotValidException.class) ચોક્કસ અપવાદોને હેન્ડલ કરવાની પદ્ધતિનો ઉલ્લેખ કરે છે, આ કિસ્સામાં, જ્યારે વિનંતીમાં અમાન્ય ડેટા હોય ત્યારે માન્યતા ભૂલો ફેંકવામાં આવે છે. તે આ ભૂલોને વૈશ્વિક સ્તરે કેપ્ચર કરે છે અને સંરચિત પ્રતિભાવની ખાતરી આપે છે.
MethodArgumentNotValidException જ્યારે @Valid સાથે ટીકા કરેલ દલીલ પર માન્યતા નિષ્ફળ જાય ત્યારે આ અપવાદ ટ્રિગર થાય છે. તે એક જ વિનંતીમાં તમામ માન્યતા ભૂલોને કેપ્ચર કરે છે, જે પછી આગળ પ્રક્રિયા કરી શકાય છે.
BindingResult એક ઇન્ટરફેસ કે જે વસંતમાં માન્યતા તપાસના પરિણામો ધરાવે છે. તેમાં એવી ભૂલો છે જે વિનંતીના મુખ્ય ભાગને માન્ય કરતી વખતે થાય છે, જે તમને પ્રોગ્રામેટિકલી માન્યતા ભૂલોનું નિરીક્ષણ કરવા સક્ષમ બનાવે છે.
FieldError વસંતમાં એક વર્ગ કે જે માન્યતા દરમિયાન ચોક્કસ ફીલ્ડથી સંબંધિત ભૂલને રજૂ કરે છે. તે ફીલ્ડનું નામ અને સંબંધિત માન્યતા ભૂલ સંદેશ જેવી વિગતો સંગ્રહિત કરે છે, જે અર્થપૂર્ણ ભૂલ સંદેશાઓને બહાર કાઢવા અને પરત કરવાનું સરળ બનાવે છે.
getBindingResult().getAllErrors() આ પદ્ધતિ BindingResult ઑબ્જેક્ટમાંથી તમામ માન્યતા ભૂલોને પુનઃપ્રાપ્ત કરે છે. તે ઑબ્જેક્ટ એરર ઉદાહરણોની સૂચિ આપે છે, જે કસ્ટમ ભૂલ પ્રતિસાદો બનાવવા માટે પ્રક્રિયા કરી શકાય છે.
Map<String, String> જાવામાં કી-વેલ્યુ જોડી સ્ટોર કરવા માટે વપરાતું ડેટા માળખું. આ સંદર્ભમાં, તેનો ઉપયોગ ફીલ્ડના નામોને (કી તરીકે) તેમના અનુરૂપ માન્યતા ભૂલ સંદેશાઓ (મૂલ્યો તરીકે) ને સરળ ભૂલ રિપોર્ટિંગ માટે મેપ કરવા માટે થાય છે.
ResponseEntity<?> આ વર્ગ વસંતમાં HTTP પ્રતિસાદ રજૂ કરે છે. તે તમને ક્લાયંટને પરત કરવામાં આવેલ પ્રતિસાદ બોડી અને HTTP સ્ટેટસ કોડ બંનેને નિયંત્રિત કરવાની મંજૂરી આપે છે, જે તેને 400 ખરાબ વિનંતી જેવા યોગ્ય સ્ટેટસ કોડ સાથે કસ્ટમ માન્યતા ભૂલ સંદેશાઓ મોકલવા માટે આદર્શ બનાવે છે.

સ્પ્રિંગ બૂટમાં એરર હેન્ડલિંગ અને વેલિડેશનને સમજવું

અગાઉના ઉદાહરણોમાં પૂરી પાડવામાં આવેલ સ્ક્રિપ્ટો સ્પ્રિંગ બૂટ એપ્લિકેશન્સમાં માન્યતાના મુદ્દાને હેન્ડલ કરવા માટે ડિઝાઇન કરવામાં આવી છે. ખાસ કરીને, તેઓ ખાતરી કરવા પર ધ્યાન કેન્દ્રિત કરે છે કે જ્યારે માન્યતા ભૂલ થાય છે-જેમ કે જ્યારે પ્રથમ નામ ખૂટે છે-સામાન્ય "આંતરિક સર્વર ભૂલ" ને બદલે વપરાશકર્તાને યોગ્ય ભૂલ સંદેશ પરત કરવામાં આવે છે. પ્રથમ સ્ક્રિપ્ટ સાથે માન્યતાનો ઉપયોગ કરે છે @માન્ય નિયંત્રક પદ્ધતિમાં એનોટેશન, સ્પ્રિંગ બૂટને વિનંતીના મુખ્ય ભાગને આપમેળે માન્ય કરવા માટે પરવાનગી આપે છે. જ્યારે માન્યતા નિષ્ફળ જાય છે, ત્યારે તે દ્વારા ભૂલ સંદેશાઓ મેળવે છે બંધનકર્તા પરિણામ ઇન્ટરફેસ, જે માન્યતા પરિણામો ધરાવે છે અને "પ્રથમ નામ નલ હોઈ શકતું નથી" જેવા ચોક્કસ સંદેશાઓ કાઢવા માટે પરવાનગી આપે છે.

ઉકેલનો બીજો નિર્ણાયક ઘટક છે પ્રતિભાવ વર્ગ આનો ઉપયોગ સ્ટેટસ કોડ સાથે HTTP પ્રતિસાદ આપવા માટે થાય છે. માન્યતા ભૂલોના કિસ્સામાં, કોડ પર સેટ કરેલ છે HttpStatus.BAD_REQUEST (400), જે દર્શાવે છે કે ક્લાયન્ટે અમાન્ય વિનંતી મોકલી છે. નિયંત્રક આમાંથી પ્રથમ ભૂલ સંદેશ કાઢે છે બંધનકર્તા પરિણામ અને તેને રિસ્પોન્સ બોડીમાં ક્લાયન્ટને પાછું મોકલે છે, ખાતરી કરીને કે વપરાશકર્તા સમજે છે કે શું ખોટું થયું છે. આ પદ્ધતિ આંતરિક સર્વર ભૂલને ટ્રિગર કર્યા વિના ગુમ થયેલ અથવા અમાન્ય ડેટા માટે સ્પષ્ટ અને વપરાશકર્તા-મૈત્રીપૂર્ણ પ્રતિસાદ પ્રદાન કરે છે.

બીજી સ્ક્રિપ્ટ a નો ઉપયોગ કરીને વધુ સ્કેલેબલ સોલ્યુશન રજૂ કરે છે ગ્લોબલ એક્સેપ્શન હેન્ડલર સાથે @RestControllerAdvice ટીકા આ અભિગમ અમને સમગ્ર એપ્લિકેશનમાં અપવાદોને હેન્ડલ કરતી પદ્ધતિઓ વ્યાખ્યાયિત કરવાની મંજૂરી આપીને ભૂલ-હેન્ડલિંગ તર્કને કેન્દ્રિય બનાવે છે. જ્યારે એ MethodArgumentNotValidException માન્યતા ભૂલોને કારણે ફેંકવામાં આવે છે, વૈશ્વિક હેન્ડલર અપવાદને અટકાવે છે અને તેની પ્રક્રિયા કરે છે, સતત ભૂલ પ્રતિસાદની ખાતરી કરે છે. તે ભૂલ-હેન્ડલિંગ તર્કને ફરીથી વાપરી શકાય તેવું અને જાળવવા માટે સરળ બનાવે છે, ખાસ કરીને બહુવિધ નિયંત્રકો સાથેની એપ્લિકેશનોમાં.

બંને અભિગમોમાં, અમે a નો ઉપયોગ કરીએ છીએ નકશો ફીલ્ડના નામોને કી તરીકે અને તેના અનુરૂપ ભૂલ સંદેશાઓને મૂલ્યો તરીકે સંગ્રહિત કરવા. આ એપ્લિકેશનને સ્ટ્રક્ચર્ડ ફોર્મેટમાં બહુવિધ માન્યતા ભૂલો પરત કરવાની મંજૂરી આપે છે. આ પદ્ધતિ વપરાશકર્તા પ્રતિસાદને સુધારે છે અને વિકાસકર્તાઓ માટે માન્યતા તર્કનું સંચાલન કરવાનું સરળ બનાવે છે. ઉપયોગની પસંદગી બંધનકર્તા પરિણામ એક અભિગમમાં અને એ ગ્લોબલ એક્સેપ્શન હેન્ડલર બીજામાં સુનિશ્ચિત કરે છે કે સોલ્યુશન્સ વિવિધ પરિસ્થિતિઓને આવરી લે છે, જે પ્રોજેક્ટની જરૂરિયાતોને આધારે લવચીકતા પ્રદાન કરે છે.

સ્પ્રિંગ બૂટમાં માન્યતા સંદેશાઓને બદલે આંતરિક સર્વર ભૂલને સંભાળવી

આ સોલ્યુશન દર્શાવે છે કે સ્પ્રિંગ બૂટ બેકએન્ડમાં યોગ્ય એરર હેન્ડલિંગ તકનીકો અને જાવામાં શ્રેષ્ઠ પ્રેક્ટિસનો ઉપયોગ કરીને માન્યતા ભૂલોને કેવી રીતે હેન્ડલ કરવી.

package com.registration.RegistrationManagementAPI.controllers;
import com.registration.RegistrationManagementAPI.models.User;
import com.registration.RegistrationManagementAPI.services.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import jakarta.validation.Valid;
import java.util.HashMap;
import java.util.Map;
@RestController
public class UserController {
    @Autowired
    private UserService userService;
    @PostMapping("/users")
    public ResponseEntity<?> createUser(@RequestBody @Valid User user, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            Map<String, String> errors = new HashMap<>();
            bindingResult.getFieldErrors().forEach(error ->
                errors.put(error.getField(), error.getDefaultMessage())
            );
            return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
        }
        userService.addUser(user);
        return new ResponseEntity<>("User Created Successfully", HttpStatus.OK);
    }
}

સ્પ્રિંગ બૂટમાં વૈશ્વિક અપવાદ હેન્ડલરનો ઉપયોગ કરવો

આ સોલ્યુશન વૈશ્વિક સ્તરે માન્યતા ભૂલોને પકડવા અને કસ્ટમાઇઝ કરવા માટે વૈશ્વિક અપવાદ હેન્ડલરનો ઉપયોગ કરે છે, જે સ્વચ્છ અભિગમ પૂરો પાડે છે.

package com.registration.RegistrationManagementAPI.exceptions;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.HashMap;
import java.util.Map;
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String, String>> handleValidationErrors(MethodArgumentNotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getAllErrors().forEach((error) -> {
            String fieldName = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();
            errors.put(fieldName, errorMessage);
        });
        return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
    }
}

સ્પ્રિંગ બૂટ એપ્લીકેશનમાં માન્યતા અને એરર હેન્ડલિંગમાં સુધારો

સ્પ્રિંગ બૂટ એપ્લિકેશન વિકસાવતી વખતે, સરળ વપરાશકર્તા અનુભવ માટે યોગ્ય માન્યતા અને ભૂલ નિયંત્રણની ખાતરી કરવી મહત્વપૂર્ણ છે. વિકાસકર્તાઓ જે સામાન્ય સમસ્યાનો સામનો કરે છે તે વિગતવાર માન્યતા સંદેશાઓને બદલે સામાન્ય "આંતરિક સર્વર ભૂલ" પ્રાપ્ત કરે છે જેમ કે "પ્રથમ નામ નલ હોઈ શકતું નથી." આ સમસ્યા ઘણીવાર એપ્લીકેશન માન્યતા ભૂલોની પ્રક્રિયા કેવી રીતે કરે છે અને જવાબો મોકલે છે તેના કારણે થાય છે. માન્યતા એનોટેશનનું યોગ્ય રૂપરેખાંકન જેમ કે @NotNull, @NotBlank, અને બંધનકર્તા પરિણામો ખાતરી કરી શકે છે કે વપરાશકર્તાઓ તેમની ઇનપુટ ભૂલો પર અર્થપૂર્ણ પ્રતિસાદ પ્રાપ્ત કરે છે.

એક વારંવાર અવગણવામાં આવતું પાસું બહુવિધ માન્યતા નિષ્ફળતાઓ માટે વૈવિધ્યપૂર્ણ ભૂલ પ્રતિભાવો બનાવવાનું છે. ફક્ત પ્રથમ ભૂલ પરત કરવાને બદલે, તમે તમામ ક્ષેત્ર-વિશિષ્ટ ભૂલોને કેપ્ચર કરવા અને તેમને એક પ્રતિભાવમાં પ્રદર્શિત કરવા માટે નકશા અથવા સૂચિનો ઉપયોગ કરી શકો છો. આ અભિગમ વપરાશકર્તાઓને તેમના ઇનપુટમાં તમામ મુદ્દાઓની સ્પષ્ટ ઝાંખી આપીને વપરાશકર્તા અનુભવને વધારે છે, તેમને એક જ સમયે તે બધાને સુધારવાની મંજૂરી આપે છે. આ વ્યૂહરચનાનો સમાવેશ કરવાથી મૂંઝવણ અટકાવી શકાય છે અને તમારી એપ્લિકેશનના એકંદર પ્રવાહને સુધારી શકાય છે.

ધ્યાનમાં લેવાનો બીજો મહત્વનો મુદ્દો એ છે કે એપ્લિકેશનના જુદા જુદા ભાગોમાં ભૂલ મેસેજિંગમાં સુસંગતતા જાળવી રાખવી. વૈશ્વિક અપવાદ હેન્ડલરનો ઉપયોગ એ સુનિશ્ચિત કરે છે કે તમામ માન્યતા ભૂલો પર પ્રક્રિયા કરવામાં આવે છે અને એક સમાન રીતે પરત કરવામાં આવે છે. આ માત્ર ડિબગીંગને સરળ બનાવે છે પરંતુ ભૂલ પ્રતિસાદોને પ્રમાણિત કરીને વધુ સારો વપરાશકર્તા અનુભવ પણ પ્રદાન કરે છે. આ ઉન્નત્તિકરણો "આંતરિક સર્વર ભૂલ" જેવા અણધાર્યા વર્તનને ઘટાડે છે અને એપ્લિકેશનને વધુ અનુમાનિત રીતે ચલાવવામાં મદદ કરે છે.

સ્પ્રિંગ બૂટમાં માન્યતા અને એરર હેન્ડલિંગ વિશે વારંવાર પૂછાતા પ્રશ્નો

  1. હું સ્પ્રિંગ બૂટમાં બહુવિધ માન્યતા ભૂલોને કેવી રીતે હેન્ડલ કરી શકું?
  2. ઉપયોગ કરીને BindingResult બધી ભૂલોને કેપ્ચર કરવા અને તેમને નકશા અથવા સૂચિ તરીકે પરત કરવા માટે, તમે વપરાશકર્તાઓને એક સાથે બહુવિધ માન્યતા સંદેશાઓ બતાવી શકો છો.
  3. નો હેતુ શું છે @RestControllerAdvice?
  4. @RestControllerAdvice તમને તમારી સમગ્ર એપ્લિકેશન માટે વૈશ્વિક અપવાદ હેન્ડલિંગને વ્યાખ્યાયિત કરવાની મંજૂરી આપે છે, ભૂલ પ્રતિસાદોમાં સુસંગતતા સુનિશ્ચિત કરે છે.
  5. મને માન્યતા ભૂલોને બદલે "આંતરિક સર્વર ભૂલ" શા માટે મળે છે?
  6. આ ત્યારે થાય છે જ્યારે નિયંત્રકમાં માન્યતા ભૂલોને યોગ્ય રીતે નિયંત્રિત કરવામાં આવતી નથી. ઉપયોગ કરીને BindingResult અથવા વૈશ્વિક અપવાદ હેન્ડલર આ સમસ્યાને હલ કરી શકે છે.
  7. શું કરે છે @Valid સ્પ્રિંગ બૂટમાં કરવું?
  8. @Valid નિયંત્રક દ્વારા ડેટા પર પ્રક્રિયા કરવામાં આવે તે પહેલાં ટીકા વિનંતીના મુખ્ય ભાગ પર માન્યતાને ટ્રિગર કરે છે. તે અવરોધો તપાસે છે જેમ કે @NotNull અથવા @NotBlank.
  9. હું કસ્ટમાઇઝ્ડ એરર મેસેજ કેવી રીતે પરત કરી શકું?
  10. તમે કસ્ટમ ભૂલ સંદેશાઓને તમારી માન્યતા એનોટેશનમાં વ્યાખ્યાયિત કરીને પરત કરી શકો છો, જેમ કે @NotNull(message="Field cannot be null").

માન્યતા અને એરર હેન્ડલિંગ પર મુખ્ય પગલાં

સ્પ્રિંગ બૂટ એપ્લીકેશનો ઘણીવાર સામાન્ય ભૂલ સંદેશાઓનો સામનો કરે છે જ્યારે માન્યતા નિષ્ફળ જાય છે, પરંતુ આને યોગ્ય ભૂલ હેન્ડલિંગ તકનીકોના અમલીકરણ દ્વારા સંબોધિત કરી શકાય છે. જેવી ટીકાઓનો ઉપયોગ કરીને @માન્ય અને લાભ લેવો બંધનકર્તા પરિણામ સિસ્ટમને ચોક્કસ ભૂલ સંદેશાઓને પકડવા અને પ્રદર્શિત કરવાની મંજૂરી આપે છે જે વપરાશકર્તાને માર્ગદર્શન આપે છે.

વધુમાં, વૈશ્વિક અપવાદ હેન્ડલર્સનો ઉપયોગ કરીને @RestControllerAdvice, વિકાસકર્તાઓ સમગ્ર એપ્લિકેશનમાં સતત ભૂલોનું સંચાલન કરી શકે છે, જે વધુ અનુમાનિત અને સરળ વપરાશકર્તા અનુભવ તરફ દોરી જાય છે. આ સમસ્યાઓનું નિરાકરણ માત્ર ડિબગીંગમાં જ મદદ કરતું નથી પણ એકંદર એપ્લિકેશન સ્થિરતાને પણ વધારે છે.

સ્પ્રિંગ બૂટમાં એરર હેન્ડલિંગ માટે સ્ત્રોતો અને સંદર્ભો
  1. આ લેખ સ્પ્રિંગ બૂટ એરર હેન્ડલિંગ અને વેલિડેશનમાં શ્રેષ્ઠ પ્રથાઓનો ઉપયોગ કરે છે, સ્પ્રિંગના સત્તાવાર દસ્તાવેજીકરણ અને ઉદાહરણોનો લાભ લે છે. માં વધુ આંતરદૃષ્ટિ માટે બંધનકર્તા પરિણામ અને માન્યતા ટીકાઓ જેવી @માન્ય, સત્તાવાર સ્પ્રિંગ ફ્રેમવર્ક દસ્તાવેજોનો સંદર્ભ લો. વસંત ફ્રેમવર્ક: ફોર્મ ઇનપુટને માન્ય કરી રહ્યું છે
  2. ઉપયોગ અંગે વિગતવાર માર્ગદર્શન માટે @RestControllerAdvice સ્પ્રિંગ બૂટ એપ્લિકેશનમાં વૈશ્વિક સ્તરે અપવાદોને હેન્ડલ કરવા માટે, આ સંસાધન તપાસો: Baeldung: સ્પ્રિંગ REST API માં વૈશ્વિક ભૂલ હેન્ડલર
  3. જાવા અને સ્પ્રિંગ બૂટમાં અપવાદો અને માન્યતા ભૂલોને અસરકારક રીતે હેન્ડલ કરવા માટેની વધારાની માહિતી આ ગહન ટ્યુટોરીયલમાં મળી શકે છે: દિનેશ ક્રિશ: સ્પ્રિંગ બૂટમાં હેન્ડલિંગમાં ભૂલ