我正在尝试通过PUT请求更新值。似乎有一个IllegalArgumentException / TypeMismatchException,我似乎不知道为什么。
这是 Product 模型类:
@Table(name="product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
private int price;
private String vendor;
private String description;
private Boolean returnPolicy;
以下是用于PUT方法的ProductController代码:
@Autowired
private ProductService productService;
@RequestMapping(method = RequestMethod.PUT, value = "/products/{id}")
public void updateProduct(@RequestBody Product product, @PathVariable int id) {
res = productService.updateProduct(product, id);
System.out.println(res ? "Successful" : "Unsuccessful");
}
这是用于更新产品的updateProduct方法:
public Boolean updateProduct(Product product, int id) {
if(productRepository.findById(Integer.toString(id)) != null) {
productRepository.save(product);
return true;
}
return false;
}
这是我的ProductRepository类:
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import testing.poc.models.Product;
@Repository
public interface ProductRepository extends CrudRepository<Product, String>{
}
这是我通过邮递员进行PUT请求的网址:
这是我要更新的数据库中的条目:
我收到的消息如下:
{ “ timestamp”:“ 2019-03-27T13:53:58.093 + 0000”, “状态”:500, “错误”:“内部服务器错误”, “ message”:“为类testing.models.Product提供了错误类型的ID。预期:类java.lang.Integer,获得了类java.lang.String;嵌套异常是java.lang.IllegalArgumentException:提供了错误的ID类test.models.Product的类型。预期:类java.lang.Integer,得到类java.lang.String“, “路径”:“ / products / 8” }
和
org.hibernate.TypeMismatchException:为类testing.models.Product提供了错误类型的ID。预期:类java.lang.Integer,得到类java.lang.String
当我在各处将'id'声明为int时,我不明白如何提供String类型。如何解决?
答案 0 :(得分:2)
请让我们看看// When _service is changed.
_service.PropertyChanged += Service_PropertyChanged;
声明,我认为// Manually raise event to update list.
private void Service_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "MyList")
OnPropertyChanged(nameof(ViewModelList));
}
方法是错误的,因为它的第一个参数为String,但是ProductRepository
的Integer为@Id。
像下面一样更改findById
ProductRepository
答案 1 :(得分:2)
将您的存储库更改为CrudRepository<Product, Integer>
,第二个参数必须是实体ID的类型。