У меня есть класс enum с типами пользователей admin, client и supplier. Я аннотировал свой атрибут userType в классе User Model с помощью @Enumerated (EnumType.STRING). Тем не менее, я имею ошибку несоответствия типов при запуске моего кода.
Я использую весеннюю загрузку и базу данных mysql с varchar для поля типа пользователя Enum. мой код ниже содержит более подробную информацию.
Мой enum класс
UserType.java
public enum UserType {
CLIENT ("Client"),
SUPPLIER ("Supplier"),
ADMIN ("Admin");
private final String type;
UserType (String userType){
this.type = userType;
}
public String getType() {
return this.type;
}
}
User.java
фрагмент кода для типа пользователя UserType.
@Entity
public class User{
@Enumerated(EnumType.STRING)
@Column (name = "user_type", nullable = false)
private UserType utype;
@Enumerated(EnumType.STRING)
public UserType getUtype() {
return utype;
}
@Enumerated(EnumType.STRING)
public void setUtype(UserType utype) {
this.utype = utype;
}
}
Контроллер
@GetMapping(value="/newUser")
public String registrationForm(Model model){
model.addAttribute("user", new User());
model.addAttribute("UserTypes", UserType.values());
return "register";
}
@PostMapping(value="/registerUser")
public String registerUser(@ModelAttribute(value = "user") User user){
userService.save(user);
return "pages/login";
}
ThymeLeaf Просмотр файла
register.html
<select th:field="*{utype}" >
<option th:each="usertype : ${UserTypes}"
th:text="${usertype.type}"
th:value="utype">
</option>
</select>
Я ожидал, что входные данные для типа будут преобразованы в строку, но у меня появляется следующая ошибка.
Ошибка поля в объекте 'user' в поле 'utype': отклоненное значение [utype]; коды [typeMismatch.user.utype, typeMismatch.utype, typeMismatch.com.grocery.demo.Model.UserType, typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.utype, utype]; аргументы []; сообщение по умолчанию [utype]]; сообщение по умолчанию [Не удалось преобразовать значение свойства типа 'java.lang.String' в требуемый тип 'com.grocery.demo.Model.UserType' для свойства 'utype'; вложенным исключением является org.springframework.core.convert.ConversionFailedException: не удалось преобразовать тип [java.lang.String] в тип [@ javax.persistence.Enumerated @ javax.persistence.Column com.grocery.demo.Model.UserType] для значения 'utype'; вложенное исключение: java.lang.IllegalArgumentException: без константы перечисления com.grocery.demo.Model.UserType.utype]]
mysql настраивается с помощью application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/FredSystems
spring.datasource.username=root
spring.datasource.password=fred@2017
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.messages.basename=validation
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect