删除商品出现异常

来源:6-6 更新和删除商品接口开发

China2477569

2021-10-11 21:33:56

Caused by: org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.imooc.mall.model.request.AddProductReq' with value '44' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'id' in 'class com.imooc.mall.model.request.AddProductReq'

at org.apache.ibatis.reflection.wrapper.BeanWrapper.setBeanProperty(BeanWrapper.java:185) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.reflection.wrapper.BeanWrapper.set(BeanWrapper.java:59) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.reflection.MetaObject.setValue(MetaObject.java:140) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyPropertyMappings(DefaultResultSetHandler.java:454) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:403) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:355) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:330) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:303) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:196) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:326) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) ~[mybatis-3.4.6.jar:3.4.6]

at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:108) ~[pagehelper-5.1.11.jar:?]

at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.4.6.jar:3.4.6]

at com.sun.proxy.$Proxy164.query(Unknown Source) ~[?:?]

at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77) ~[mybatis-3.4.6.jar:3.4.6]

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_291]

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_291]

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_291]

at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_291]

at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) ~[mybatis-spring-1.3.2.jar:1.3.2]

... 87 more

Caused by: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'id' in 'class com.imooc.mall.model.request.AddProductReq'

at org.apache.ibatis.reflection.Reflector.getSetInvoker(Reflector.java:411) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.reflection.MetaClass.getSetInvoker(MetaClass.java:168) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.reflection.wrapper.BeanWrapper.setBeanProperty(BeanWrapper.java:177) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.reflection.wrapper.BeanWrapper.set(BeanWrapper.java:59) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.reflection.MetaObject.setValue(MetaObject.java:140) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyPropertyMappings(DefaultResultSetHandler.java:454) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:403) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:355) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:330) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:303) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:196) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:326) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) ~[mybatis-3.4.6.jar:3.4.6]

at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:108) ~[pagehelper-5.1.11.jar:?]

at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.4.6.jar:3.4.6]

at com.sun.proxy.$Proxy164.query(Unknown Source) ~[?:?]

at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) ~[mybatis-3.4.6.jar:3.4.6]

at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77) ~[mybatis-3.4.6.jar:3.4.6]

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_291]

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_291]

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_291]

at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_291]

at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) ~[mybatis-spring-1.3.2.jar:1.3.2]

... 87 more


package com.imooc.mall.service.impl;

import com.imooc.mall.exception.ImoocMallException;
import com.imooc.mall.exception.ImoocMallExceptionEnum;
import com.imooc.mall.model.dao.ProductMapper;
import com.imooc.mall.model.pojo.Product;
import com.imooc.mall.model.request.AddProductReq;
import com.imooc.mall.service.CategoryService;
import com.imooc.mall.service.ProductService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
* 商品服务实现类
*/
@Service
public class ProductServiceImpl implements ProductService {
@Autowired
   ProductMapper productMapper;

   @Autowired
   CategoryService categoryService;

   @Override
   public void add(AddProductReq addProductReq) {
Product product = new Product();
       BeanUtils.copyProperties(addProductReq, product);
       Product productOld = productMapper.selectByName(addProductReq.getName());
       if (productOld != null) {
throw new ImoocMallException(ImoocMallExceptionEnum.NAME_EXISTED);
       }
int count = productMapper.insertSelective(product);
       if (count == 0) {
throw new ImoocMallException(ImoocMallExceptionEnum.CREATE_FAILED);
       }
}

@Override
   public void update(Product updateProduct) {
Product productOld = productMapper.selectByName(updateProduct.getName());
       //同名且不同id,不能继续修改
       if (productOld != null && !productOld.getId().equals(updateProduct.getId())) {
throw new ImoocMallException(ImoocMallExceptionEnum.NAME_EXISTED);
       }
int count = productMapper.updateByPrimaryKeySelective(updateProduct);
       if (count == 0) {
throw new ImoocMallException(ImoocMallExceptionEnum.UPDATE_FAILED);
       }
}

@Override
   public void delete(Integer id) {
Product productOld = productMapper.selectByPrimaryKey(id);
       //查不到该记录,无法删除
       if (productOld == null) {
throw new ImoocMallException(ImoocMallExceptionEnum.DELETE_FAILED);
       }
int count = productMapper.deleteByPrimaryKey(id);
       if (count == 0) {
throw new ImoocMallException(ImoocMallExceptionEnum.DELETE_FAILED);
       }
}
}


package com.imooc.mall.controller;

import com.imooc.mall.common.ApiRestResponse;
import com.imooc.mall.common.Constant;
import com.imooc.mall.exception.ImoocMallException;
import com.imooc.mall.exception.ImoocMallExceptionEnum;
import com.imooc.mall.model.pojo.Product;
import com.imooc.mall.model.request.AddProductReq;
import com.imooc.mall.model.request.UpdateProductReq;
import com.imooc.mall.service.ProductService;

import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;
import java.net.FileNameMap;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.UUID;

/**
* 后台商品管理Controller
*/
@RestController//代替@ResponseBody
public class ProductAdminController {
@Autowired
   ProductService productService;

   @PostMapping("/admin/product/add")
public ApiRestResponse addProduct(@Valid @RequestBody AddProductReq addProductReq) {
productService.add(addProductReq);
       return ApiRestResponse.success();
   }
@PostMapping("/admin/upload/file")
public ApiRestResponse upload(HttpServletRequest httpServletRequest, @RequestParam("file") MultipartFile file) {
String filename = file.getOriginalFilename();
       String suffixName = filename.substring(filename.lastIndexOf("."));
       //生成文件名称UUID
       UUID uuid = UUID.randomUUID();
       String newFileName = uuid.toString() + suffixName;
       //创建文件
       File fileDirectory = new File(Constant.FILE_UPLOAD_DIR);
       File destFile = new File(Constant.FILE_UPLOAD_DIR + newFileName);
       if (!fileDirectory.exists()) {
if (!fileDirectory.mkdir()) {
throw new ImoocMallException(ImoocMallExceptionEnum.MKDIR_FAILED);
           }
}
try {
file.transferTo(destFile);
       } catch (IOException e) {
e.printStackTrace();
       }
try {
return ApiRestResponse.success(getHost(new URI(httpServletRequest.getRequestURL() + "")) + "/images/" + newFileName);
       } catch (URISyntaxException e) {
return ApiRestResponse.error(ImoocMallExceptionEnum.UPDATE_FAILED);
       }
}

private URI getHost(URI uri) {
URI effectiveURI;
       try {
effectiveURI = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), null, null, null);
       } catch (URISyntaxException e) {
effectiveURI = null;
       }
return effectiveURI;
   }
@ApiOperation("后台更新商品")
@PostMapping("/admin/product/update")
public ApiRestResponse updateProduct(@Valid @RequestBody UpdateProductReq updateProductReq) {
Product product = new Product();
       BeanUtils.copyProperties(updateProductReq, product);
       productService.update(product);
       return ApiRestResponse.success();
   }

@ApiOperation("后台删除商品")
@PostMapping("/admin/product/delete")
public ApiRestResponse deleteProduct(@RequestParam Integer id) {
productService.delete(id);
       return ApiRestResponse.success();
   }
}
package com.imooc.mall.model.request;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

public class UpdateProductReq {

@NotNull
   private Integer id;

   private String name;

   private String image;

   private String detail;

   private Integer categoryId;

   @Min(value = 1, message = "价格不能小于1")
private Integer price;

   public Integer getId() {
return id;
   }

public void setId(Integer id) {
this.id = id;
   }

@Max(value = 10000, message = "库存不能大于10000")
private Integer stock;

   private Integer status;


   public String getName() {
return name;
   }

public void setName(String name) {
this.name = name == null ? null : name.trim();
   }

public String getImage() {
return image;
   }

public void setImage(String image) {
this.image = image == null ? null : image.trim();
   }

public String getDetail() {
return detail;
   }

public void setDetail(String detail) {
this.detail = detail == null ? null : detail.trim();
   }

public Integer getCategoryId() {
return categoryId;
   }

public void setCategoryId(Integer categoryId) {
this.categoryId = categoryId;
   }

public Integer getPrice() {
return price;
   }

public void setPrice(Integer price) {
this.price = price;
   }

public Integer getStock() {
return stock;
   }

public void setStock(Integer stock) {
this.stock = stock;
   }

public Integer getStatus() {
return status;
   }

public void setStatus(Integer status) {
this.status = status;
   }

}

请问老师,这是因为哪里出现问题了呢?为什么错误提示信息是There is no setter for property named 'id' in 'class com.imooc.mall.model.request.AddProductReq'呢?删除商品的方法的参数应该与AddProductReq无关吧,为什么会提示AddProductReq类中没有id 的setter方法呢?

写回答

1回答

好帮手慕小尤

2021-10-12

同学你好,1、测试同学代码未复现同学问题,可能是AddProductReq类中多了id属性,则建议同学进行删除。同学也可以下载课程源代码与同学代码进行对比。

2、如果还存在问题,则建议同学反馈AddProductReq类,便于老师定位问题。

祝学习愉快!

0

0 学习 · 16556 问题

查看课程