找不到枚举的主构造函数或单个公共构造函数



我一直在与反应性Thymelaf作斗争,现在我在通过@ModelAttribute:传递Enum后陷入IllegasStateException

@PostMapping("/lvl")
public Mono<String> getAllByLvl(@ModelAttribute Level level, Model model) {
log.info(" level is: " +level);
return Mono.just(model)
.flatMap(m -> {
m.addAttribute("skill",new Skill());
m.addAttribute("skills",new ReactiveDataDriverContextVariable(service.findAllByLevel(level)));
return Mono.just(TEMPLATE);
});
}

枚举级别:

@Getter
@NoArgsConstructor
public enum Level {
A,
B,
C,
D;
}

方法形式:

<div>
<h4>filter by lvl</h4>
<form th:action="@{/skill/lvl}" th:object="${skill}" method="post">
<select>
<option value ="${skill.level}">A</option>
<option value ="${skill.level}">B</option>
<option value ="${skill.level}">C</option>
<option value ="${skill.level}">D</option>
<input type="submit" value="Submit"/>
</select>
</form>
</div>

枚举的父实体:

@Data
@Table
@NoArgsConstructor
@AllArgsConstructor
public class Skill implements Persistable<UUID> {
@Id
private UUID id;
@Column("skill_name")
private String name;
private Level level;
private Priority priority;
@Column("skill_group_name")
private String skillGroupName;
@Override
public boolean isNew() {
boolean result = Objects.isNull(id);
this.id = result ? UUID.randomUUID() : this.id;
return result;
}

它与一起下降

blockquote java.lang.IllegalStateException:没有为类com.gmail.qwertygoog.roadmap.model.Level找到主构造函数或单个公共构造函数,也没有找到默认构造函数位于org.springframework.beans.BeanUtils.getResolutileConstructor(BeanUtils.java:250(~[spring-beans-5.37.jar:5.3.7]已抑制:reactor.core.publisher.FluxOnAssembly$OnAssemblyException:

因此,enum似乎拥有所有可能的构造函数,但jackson无法正确地反序列化它。有什么建议吗?

请参考:https://www.baeldung.com/jackson-serialize-enums

低于

public enum Level {
A ("A"),
B ("B"),
C ("C"),
D ("D");
private String level;
private Level(String level) {
this.level = level;
}
}

相关内容

最新更新