Auf Thema antworten

Hallo zusammen.


Kurz zu dem was ich vorhabe :

Ich möchte gerne einen User anlegen und diesem eine / mehrere Rollen zuweisen.

Hier mein Code :

[CODE=java]@Data

@ToString

public class User {


    private Set<Role> roles = new HashSet<>();


}[/CODE]


[CODE=java]

@Data

@ToString

public class Role {


    private Integer id;

    private String name;

}[/CODE]


[CODE lang="java" title="USerController"]@Controller

public class UserController {


    @GetMapping("/users/new")

    public ModelAndView newUser() {

        User user = new User();

        ModelAndView mav = new ModelAndView("user_form");

        mav.addObject("user", user);


        Role role1 = new Role();

        role1.setId(1);

        role1.setName("ROLE 1");


        Role role2 = new Role();

        role2.setId(2);

        role1.setName("ROLE 2");


        Role role3 = new Role();

        role3.setId(3);

        role1.setName("ROLE 3");


        List<Role> roles = Lists.newArrayList(role1, role2, role3);


        mav.addObject("allRoles", roles);


        return mav;

    }


    @PostMapping("/users/save")

    public String saveUser(@ModelAttribute User user){


        System.out.println("save user : " + user);

        return "user_form";

    }[/CODE]


[CODE lang="html" title="user form"]<body>


<form th:action="@{/users/save}" th:eek:bject="${user}" method="post">

    <p>

        <label>Roles:

            <input type="checkbox" name="roles"

                   th:each="role : ${allRoles}"

                   th:text="${role.name}"

                   th:value="${role.id}"

                   th:field="*{roles}"

            />

        </label>

    </p>


    <input type="submit" id="submitButton" th:value="Save">

    <input type="reset" id="resetButton" name="reset" th:value="Reset"/>

</form>

</body>[/CODE]


Wenn ich nun die Seite localhost:8080/users/new aufrufe erscheint das Eingabe Formular.

Wenn ich nun Speichere ruft er die Funktion saveUser im Controller auf. Allerdings erhalte ich dann folgende Exception :


Field error in object 'user' on field 'roles': rejected value [1]; codes [typeMismatch.user.roles,typeMismatch.roles,typeMismatch.java.util.Set,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.roles,roles]; arguments []; default message [roles]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Set' for property 'roles'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'entity.Role' for property 'roles[0]': no matching editors or conversion strategy found]]


Ich vermute mal, dass er aus dem String (Role ID) kein Role Object bauen kann ?!

Wenndas stimmt wie macht man es richtig ?


Ich habe mich an einem Beispiel  hier orientiert.


Vielen Dank für eure Hilfe



Oben