java - 如何在 Java 的 REST Web 服务中创建唯一变量?
问题描述
我正在尝试通过 IntelliJ 中的 Spring Boot 制作简单的 REST Web 服务。我还必须为此创建 CRUD 客户端,但稍后再说。
我必须制作一个包含以下字段的 Products 表:id、名称、价格和状态。而且我在制作唯一的“名称”字段时遇到了问题。如果我通过邮递员发送具有相同名称的数据,则不应将其添加到数据库中,并且应该给我一个服务器错误。
此外,我必须让“状态”字段只能有 3 个唯一值:“可用”、“缺货”和“退出销售”。您不能添加状态为“已退出销售”的新产品。因此,您只能使用这三个值来发布“状态”数据。
谁能帮我解决这个问题?
我的产品类别:
@Entity
public class Products {
private Long id;
private String nazwa;
private Float cena;
private String status;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNazwa() {
return nazwa;
}
public void setNazwa(String nazwa) {
this.nazwa = nazwa;
}
public Float getCena() {
return cena;
}
public void setCena(Float cena) {
this.cena = cena;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
我的产品控制器
@RestController
@RequestMapping("/products")
public class ProductsController {
@Autowired
private ProductJpaRepository productJpaRepository;
@GetMapping(value = "/all")
public List<Products> findAll() {
return productJpaRepository.findAll();
}
@GetMapping(value = "/{nazwa}")
public Products findByName(@PathVariable final String nazwa) {
return productJpaRepository.findByNazwa(nazwa);
}
@PostMapping(value = "/load")
public Products load(@RequestBody final Products products) {
return productJpaRepository.save(products);
}
}
解决方案
I have to make that "status" field can only have 3 unique values: "available", "out of stock" and "withdrawn from sale".
You define an enum
public enum Status {
AVAILABLE, OUT_OF_STOCK, WITHDRAWN
}
and use it in the Product
instead of a String
.
public class Product {
private Long id;
private String nazwa;
private Float cena;
private Status status;
// ...
}
You do have to add some logic to get that into your repository, see eg JPA enumerated types mapping.
推荐阅读
- vulkan - 每帧重新创建 RenderPass
- html - Internet explorer and edge attempt to download a file as html
- google-cloud-platform - 找不到从接收器创建的服务帐户
- javascript - 将 JSX 文件导入 webpack 配置
- vue.js - 如何在不同页面之间使用 Vue js 在导航链接上添加平滑滚动?
- python - 如何在pytest中使用monkeypatch多次模拟一个函数
- html - 基于父类中的数字样式 N 元素
- r - 验证消息未在屏幕上的任何位置向用户显示
- javascript - 如何在 Shopify 上添加 wow.js/animate.css?
- terraform - Terraform:使用带有 for_each 和映射 security_group_rule 的 Terraform 创建多个实例