为字段Name添加验证时出现错误:
对象='item'的验证失败。错误计数:对象'item'中的字段'image'上出现字段错误:已拒绝java.lang.非法状态异常:无法将类型“org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile”的值转换为属性“image”所需的类型“java.lang.String”:找不到匹配的编辑器或转换策略
实体、类物料
@Entity
@Table(name = "items")
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@NotBlank(message = "Введите наименование")
@Column(name = "name")
private String name;
@JsonIgnore
@Lob
@Column(name = "image")
private String image;
}
主控制器
@PostMapping("/items")
public String add(
@Valid Item item,
@RequestParam("image") MultipartFile file,
BindingResult bindingResult,
Model model
) throws IOException {
if (bindingResult.hasErrors()){
Map<String, String> errorsMap = ControllerUtils.getErrors(bindingResult);
model.mergeAttributes(errorsMap);
model.addAttribute("item", item);
} else {
if (file != null && !file.getOriginalFilename().isEmpty()) {
byte[] data = file.getBytes();
String imageString = Base64.getEncoder().encodeToString(data);
item.setImage(imageString);
}
model.addAttribute("item", null);
itemService.saveItem(item);
}
2条答案
按热度按时间1l5u6lss1#
我通过创建新的formParams(非常类似于带有所有验证参数的实体Items)并将此表单作为post方法的参数来解决这个问题。
67up9zun2#
确保表单开始标记中有一个enctype,并确保request参数中的名称与表单和数据库字段中的名称相同