首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring Boot通过Id请求数据

Spring Boot通过Id请求数据
EN

Stack Overflow用户
提问于 2018-01-30 01:44:32
回答 3查看 1.3K关注 0票数 4

Category.java

代码语言:javascript
复制
@Entity
@Data
@Table(name = "categories")
public class Category implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@NotNull
@Size(min = 5, max = 60)
@Column(name = "category", length = 50, unique = true)
private String category;

@OneToMany
private Set<Product> product;

}

类别Controller.java

代码语言:javascript
复制
@GetMapping("/category/{id}")
public ResponseEntity<List<Product>> getCategoryById(@PathVariable(value = "id") Long categoryId) {
    List<Product> category = productRepository.findAllByCategoryId(categoryId);
    if (category == null) {
        return ResponseEntity.notFound().build();
    }
    return ResponseEntity.ok().body(category);
}

ControllerRepositoy.java

代码语言:javascript
复制
@Repository
public interface CategoryRepository extends JpaRepository<Category,Long>{

}

Products.Java

代码语言:javascript
复制
@Entity
@Data
@Table(name = "products")
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @Size(min = 5, max = 60)
    @Column(name = "productName", length = 50, unique = true, nullable = false)
    private String productName;

    @NotNull
    @Size(min = 10, max = 200)
    @Column(name = "description", length = 200, unique = true, nullable = false)
    private String description;

    @NotNull
    //@Pattern(regexp = "^[0-9]*$")
    @Size(min = 1, max = 10)
    @Column(name = "price", length = 10, unique = true, nullable = false)
    private int price;

    @ManyToOne
    @JoinColumn(name="product")
    private Category categoryId;

    @NotNull
    @Column(name = "imageURL", length = 500, nullable = false)
    private String image;

}

ProductController.java

代码语言:javascript
复制
@RestController
@RequestMapping("/product")
public class ProductController {

    @Autowired
    ProductRepository productRepository;

    @GetMapping("/product")
    public List<Product> getAllNotes() {
        return productRepository.findAll();
    }

    @GetMapping("/product/{id}")
    public ResponseEntity<Optional<Product>> getProductById(@PathVariable(value = "id") Long categoryID) {
        Optional<Product> product = productRepository.findById(categoryID);
        if(product == null) {
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok().body(product);
    }

    @PostMapping("/product")
    public @Valid Product createProduct(@Valid @RequestBody Product product) {
        System.err.println(product);
        return productRepository.save(product);
    }


}

我想使用类别Id来查询产品。所以我在categoryController中使用了productRepository。

这就是代码。当为GET请求提供Id时,它会显示错误。错误是:

代码语言:javascript
复制
java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [com.susl.Agroapi.model.Category (n/a)]

如何解决?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-31 18:38:23

你必须像下面这样修改代码

将产品实体添加到

代码语言:javascript
复制
@ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
private Category category;

将类别实体添加到

代码语言:javascript
复制
@OneToMany(mappedBy="category",cascade=CascadeType.REMOVE)
private Set<Product> pr;

如下所示创建产品存储库

代码语言:javascript
复制
public interface ProductRepository extends PagingAndSortingRepository<Product, Long>{
    List<Product> findAllProductByCategoryId(@Param("id")Long id);
}

然后,您可以使用带有findAllProductByCategoryId({categoryId})的ProductRepository通过控制器类进行调用

票数 1
EN

Stack Overflow用户

发布于 2018-01-30 15:12:19

您还没有发布请求的ProductRepository,但是现在我们至少有了Product实体,错误很可能是应该将该方法命名为

代码语言:javascript
复制
findAllByCategoryIdId

因为您希望通过字段categoryIdid进行搜索。

或者您可以(也应该)将字段categoryId重命名为category,因为这就是它:一个类别,而不是一个ID。

票数 0
EN

Stack Overflow用户

发布于 2018-01-30 02:18:43

看起来你想使用CategoryRepository而不是ProductRepository。

创建:

代码语言:javascript
复制
 @Autowired
 CategoryRepository categoryRepository;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48507081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档