我有一个枚举类,用户类型为admin,client和Supplier。我在用户模型类中用@Enumerated(EnumType.STRING)注释了我的userType属性。但是,运行代码时出现类型不匹配的错误。
我正在使用带有varchar的spring boot和mysql数据库作为Enum usertype字段。我下面的代码有更多详细信息。
我的枚举类
UserType.java
stages:
- test
integration-tests:
stage: test
tags:
- host-vm-shell
script:
- docker run --rm -it -u username -v $SCRIPT_DIR:/tests-folder $HOSTS $DOCKER_IMAGE
- robot test-1.robot
User.java
用户类型utype的代码段。
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;
}
}
控制器
@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;
}
}
百里香叶查看文件
register.html
@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";
}
我希望将utype的输入转换为字符串,但是出现以下错误。
对象“用户”中字段“ utype”上的字段错误:拒绝的值[utype];代码[typeMismatch.user.utype,typeMismatch.utype,typeMismatch.com.grocery.demo.Model.UserType,typeMismatch];参数[org.springframework.context.support.DefaultMessageSourceResolvable:代码[user.utype,utype];参数[];默认消息[utype]];默认消息[未能将类型'java.lang.String'的属性值转换为属性'utype'的必需类型'com.grocery.demo.Model.UserType';嵌套异常是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配置的
<select th:field="*{utype}" >
<option th:each="usertype : ${UserTypes}"
th:text="${usertype.type}"
th:value="utype">
</option>
</select>
答案 0 :(得分:1)
执行以下简单操作:
@GetMapping(value="/newUser")
public String registrationForm(Model model){
model.addAttribute("user", new User());
model.addAttribute("UserTypes",Arrays.asList(UserType.values()));
return "register";
}
在你的百里香叶中:
<select th:field="*{utype}" >
<option th:each="usertype : ${UserTypes}"
th:text="${usertype}"
th:value="${usertype}">
</option>
</select>
如果是JSP:
<select id="editState"class="form-control">
<c:forEach items="${UserTypes}" var="ut" varStatus="loop">
<option value="${ut}">${ut}</option>
</c:forEach>
</select>
答案 1 :(得分:0)
在您的枚举中添加此方法
$x = Get-Content -Path "C:\Users\Desktop\abc*.txt"
[array]::Reverse($x)
$d = foreach($line in $x)
{
if($line - like "HEllo")
{
#Read the text file till "hello" and copy the contents
}
}
在胸腺叶中
public static UserType getByName(String name) {
for (UserType type : UserType.values()) {
if (type.getName().equals(name)) {
return type;
}
}
return null;
}
然后从后端尝试使用getByName方法来解析您的HTML输入。
答案 2 :(得分:0)
首先,尝试在枚举中包含一个与您的ENUM值完全匹配的字段。这样可以轻松获取任何枚举
例如
while id < x and id > y
}
出于您的目的,您可以尝试根据您的值覆盖toString()方法。
答案 3 :(得分:0)
问题出在您的register.html中:
<select th:field="*{utype}" >
<option th:each="usertype : ${UserTypes}"
th:text="${usertype.type}"
th:value="utype">
</option>
</select>
在th:value标记中,您对 utype 字段使用了错误的引用。您应该使用变量表达式,在其中声明要绑定到User对象的utype field 的 value 。所以应该是这样的:
<select th:field="*{utype}" >
<option th:each="usertype : ${UserTypes}"
th:text="${usertype.type}"
th:value="${usertype}">
</option>
</select>
如果仍然无法使用,请参阅我更新的示例项目: https://github.com/gybandi/spring-ui-demo