Цель варианта использования — добавить новую категорию (идентификатор, имя, изображение и логическое значение).
Объект категории:
Код: Выделить всё
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String image;
private Boolean isActive;
}
Код: Выделить всё
@PostMapping("/admin/category/add")
public String saveCategory(@ModelAttribute Category category, @RequestParam("image") MultipartFile file,
HttpSession session) throws IOException {
String imageName = file != null ? file.getOriginalFilename() : "default.jpg";
category.setImage(imageName);
Boolean existCategory = categoryService.existCategory(category.getName());
if (existCategory) {
session.setAttribute("errorMsg", "Category Name already exists");
} else {
Category saveCategory = categoryService.save(category);
if (ObjectUtils.isEmpty(saveCategory)) {
session.setAttribute("errorMsg", "Not saved ! internal server error");
} else {
File saveFile = new ClassPathResource("static/img").getFile();
Path path = Paths.get(saveFile.getAbsolutePath() + File.separator + "category_img" + File.separator
+ file.getOriginalFilename());
// System.out.println(path);
Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
session.setAttribute("succMsg", "Saved successfully");
}
}
return "redirect:/admin/category";
}
Код: Выделить всё
Enter Category
Status
Active
Inactive
Upload Image
Save
Код: Выделить всё
There was an unexpected error (type=Bad Request, status=400).
org.springframework.web.bind.MethodArgumentNotValidException: не удалось выполнить проверку аргумента [0] в общедоступной java.lang.String com.sap.Shopping.Cart.controller.AdminController.saveCategory(com.sap. Shopping.Cart.model.Category,org.springframework.web.multipart.MultipartFile,jakarta.servlet.http.HttpSession) выдает исключение java.io.IOException: [Ошибка поля в объекте «Категория» в поле «Изображение»: отклоненное значение [ org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile@73eb957e]; коды [typeMismatch.category.image,typeMismatch.image,typeMismatch.java.lang.String,typeMismatch]; аргументы [org.springframework.context.support.DefaultMessageSourceResolvable: коды [category.image,image]; аргументы []; сообщение по умолчанию [изображение]]; сообщение по умолчанию [Не удалось преобразовать значение свойства типа «org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile» в требуемый тип «java.lang.String» для свойства «изображение»; Невозможно преобразовать значение типа "org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile" в требуемый тип "java.lang.String" для свойства "image": не найдено подходящих редакторов или стратегии преобразования]]
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:158)
в org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)
в org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter .java :926)
в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)
в org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter .handle(AbstractHandlerMethodAdapter.java:87)
в org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
в org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet .java:979)
в org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
в org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) )
в jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
в org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
в jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
в org.apache.catalina. core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
в org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
в org.apache.catalina.core. ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
в org.springframework.web.filter.RequestContextFilter.doFilterInternal( RequestContextFilter.java:100)
в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 164)
в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
в org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
в org .apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
в org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
в org.springframework.web .filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
в org.apache.catalina.core.ApplicationFilterChain .doFilter(ApplicationFilterChain.java:140)
в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
в org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve .java:90)
в org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115 )
в org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
в org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384)
в org. apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
в org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
в org.apache.tomcat.util. net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
в org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
в org.apache.tomcat. util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
в org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
в org.apache. tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
на java.base/java.lang.Thread.run(Thread.java:833)
Как говорится в ошибке, существует проблема несоответствия типов изображения, но я не смог понять, что именно изменить.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -exception