0

I dont know how fix this error, i saw some articles about that but nothing works.

Error

Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errorsField error in object 'pupil' on field 'curse': rejected value [ModelCurse(id=2, name=PHP, division=2da, pupilList=[], teacherList=[])]; [Failed to convert property value of type 'java.lang.String' to required type 'com.example.administrator.administrator.model.ModelCurse' for property 'curse';

HTML

<form th:action="@{/pupilController/add}"  th:object="${pupil}" method="post">
            <div class="form-row">
                <div class="form-group col-md-6">
                    <label>Name</label>
                    <input type="text" class="form-control" th:field="*{name}" placeholder="Name">
                </div>
                <div class="form-group col-md-6">
                    <label>Last Name</label>
                    <input type="text" class="form-control" th:field="*{lastName}" placeholder="Last Name">
                </div>
                <div class="form-group col-md-6">
                    <label>Age</label>
                    <input type="number" class="form-control" th:field="*{age}" placeholder="Age">
                </div>
                <div class="form-group col-md-6">
                    <label>Phone Number</label>
                    <input type="text" class="form-control" th:field="*{phoneNumber}" placeholder="Phone Number">
                </div>
                <div class="form-group col-md-6">
                    <select th:field="*{curse}" class="form-control">
                        <option th:each="curso : ${curses}"
                                th:value="${curso}"
                                th:text="${curso.name}"></option>
                    </select>
                </div>
            </div>
    
            <input type="submit" name="btnInsert" class="btn btn-primary"  value=Añadir>
    
        </form>

Controller

 @GetMapping("/addPupil")
    public ModelAndView login(Model model){
        ModelAndView mav = new ModelAndView("addpupil");
        List<ModelCurse> modelCurses = curseService.getAllCurses();
        mav.addObject("pupil",new ModelPupil());
        mav.addObject("curses",modelCurses);
        return mav;
    }



 @PostMapping("/add")
    public RedirectView addPupil(@ModelAttribute("pupil")ModelPupil modelPupil){
        pupilService.addPupil(modelPupil);
        return new RedirectView("/pupilController/pupilList");
    }

DTO

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ModelCurse {

    private long id;
    private String name;
    private String division;
    private List<ModelPupil> pupilList;
    private List<ModelTeacher> teacherList;

}

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ModelPupil {

    private long id;
    private String name;
    private String lastName;
    private int age;
    private int phoneNumber;
    private ModelCurse curse;

}

1 Answers1

0

When we submit the form, the value of selected option is sent as Text or String in HTTP POST. So, if you are expecting that Spring would automatically convert that String value of curse to object of type ModelCurse, then your assumption is wrong.
But Spring does provide us a way to do it using Java beans PropertyEditorSupport. Here you can extend this class, and provide your own implementation on how to convert that String to the required object.

Chetan Ahirrao
  • 1,454
  • 11
  • 16