Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个非法辩论的可能原因是什么?_Java_Spring_Illegalargumentexception_Type Mismatch - Fatal编程技术网

Java 这个非法辩论的可能原因是什么?

Java 这个非法辩论的可能原因是什么?,java,spring,illegalargumentexception,type-mismatch,Java,Spring,Illegalargumentexception,Type Mismatch,我正试图通过PUT请求更新一个值。似乎有一个IllegalArgumentException/类型不匹配Exception,我似乎不明白为什么 以下是产品模型类: 以下是PUT方法的ProductController代码: 以下是更新产品的updateProduct方法: 以下是我的ProductRepository类: 这是我通过邮递员发出的PUT请求的URL: 这是我试图更新的数据库中的条目: 我得到的信息如下: { 时间戳:2019-03-27T13:53:58.093+0000, 现状

我正试图通过PUT请求更新一个值。似乎有一个IllegalArgumentException/类型不匹配Exception,我似乎不明白为什么

以下是产品模型类:

以下是PUT方法的ProductController代码:

以下是更新产品的updateProduct方法:

以下是我的ProductRepository类:

这是我通过邮递员发出的PUT请求的URL:

这是我试图更新的数据库中的条目:

我得到的信息如下:

{ 时间戳:2019-03-27T13:53:58.093+0000, 现状:500, 错误:内部服务器错误, 消息:为class testing.models.Product提供的id类型错误。预期:class java.lang.Integer,Get class java.lang.String;嵌套异常为java.lang.IllegalArgumentException:为class testing.models.Product提供的id类型错误。预期:class java.lang.Integer,Get class java.lang.String, 路径:/products/8 }

org.hibernate.TypeMismatchException:为class testing.models.Product提供了错误类型的id。应为:类java.lang.Integer,获得类java.lang.String

当我将“id”声明为int时,我不理解如何提供字符串类型。如何解决这个问题?

请让我们看看ProductRepository声明,我假设findById方法是错误的,因为它的第一个参数是字符串,但ProductRepository的整数是@Id

更改ProductRepository,如下所示

导入org.springframework.data.repository.crudepository; 导入org.springframework.stereotype.Repository; 进口测试.poc.models.Product; @存储库 公共接口ProductRepository扩展了Crudepository{ }
将存储库更改为CRUDEPository,第二个参数必须是实体ID的类型。

Integer.ToString将int转换为字符串。您可以添加ProductRepository类吗?Integer.toStringid-我在方法中这样做,因为findById需要一个字符串参数。在编辑中添加了ProductRepository类。更改为公共接口ProductRepository扩展了Crudepository并删除Integer.toString
@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;
@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");
}
public Boolean updateProduct(Product product, int id) {
    if(productRepository.findById(Integer.toString(id)) != null) {
        productRepository.save(product);
        return true;
    }
        return false;
}
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import testing.poc.models.Product;

@Repository
public interface ProductRepository extends CrudRepository<Product, String>{

}