首页 > 解决方案 > 如何在 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);
    }
}

标签: javarestcrud

解决方案


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.


推荐阅读