微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 springboot 创建端点的问题

如何解决使用 springboot 创建端点的问题

我的任务是创建端点,逻辑是:
用户提供输入 --> nipContractor.class 中的变量之一) 根据该 nip,我必须返回 JSON,其中将包含有关分配给具有所提供 nip 的承包商的产品的信息。 示例 JSON 应如下所示:{"name": "product_name","quantity": "0","address": "storage_address"}

在这个问题上花了很多时间,但仍然不知道要实现什么逻辑。 这超出了我的新手头;

Product.class

public class Product extends AbstractEntity {


    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private long quantity;


    @OnetoMany(cascade = CascadeType.ALL,orphanRemoval = true,mappedBy = "product",fetch = FetchType.EAGER)
    private List<Assignment> assignments;


    @OnetoMany(cascade = CascadeType.ALL,mappedBy = "product")
    private List<Place> places;
}

Contractor.class

public class Contractor extends AbstractEntity {

    @Id
    @GeneratedValue
    private Long id;
    private String contractorName;
    private int nip;

    @OnetoMany(cascade = CascadeType.ALL,mappedBy = "contractor")
    private List<Assignment> assignments;
}

Assignment.class

public class Assignment extends AbstractEntity {

    @Id
    @GeneratedValue
    private Long id;


    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "id_product",referencedColumnName = "id",nullable = false)
    private Product product;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "id_contractor",nullable = false)
    private Contractor contractor;

}

Storage.class

public class Storage extends AbstractEntity {

    @Id
    @GeneratedValue
    private Long id;
    private String address;

    @OnetoMany(cascade = CascadeType.ALL,mappedBy = "storage")
    private List<Place> places;
}

Place.class

public class Place extends AbstractEntity {

    @Id
    @GeneratedValue
    private Long id;
    private Long shelfNumber;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "id_product",referencedColumnName = "id")
    private Product product;


    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "id_storage",nullable = false)
    private Storage storage;

}

image of ERD Diagram

解决方法

我不知道您确切需要什么逻辑。此外,我不确定该代码是否适合您应用程序的其余部分。但也许它会有所帮助。

存储库和rest控制器将返回的接口:

public interface GetProductResponse {
    public String getName();
    public int getQuantity();
    public String getAddress();
}

您可以在其中编写查询的存储库:

public interface ProductRepository extends CrudRepository<Product,Long>  {
    @Query(nativeQuery = true,value = (
"SELECT product.name AS name,product.quantity AS quantity,storage.address " + 
//be sure to name the result columns the variables in GetProductResponse (without the 'get')
"FROM contractor INNER JOIN assignment ON contractor.id = assignment.id_contractor " +
" INNER JOIN product ON product.id = assignment.id " +
" INNER JOIN place ON product.id = place.id_product " +
" INNER JOIN storage ON storage.id = place.id_storage " +
"WHERE contractor.nip = :nip_ "
    )
    public List<GetProductResponse> getProducts(@Param("nip_")String nip)
}

其余控制器:

@RestController
public class Controller {
    @RequestMapping(value = "/getProductsByNip",method = { RequestMethod.POST})
    public List<GetProductResponsee> getProductsByNip(@RequestBody String nip) {
        return productRepository.getProducts(nip);
    }
}

输出将如下所示:

[
{"name": "product_name1","quantity": "0","address": "storage_address1"},{"name": "product_name2","quantity": "2","address": "storage_address2"}
]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。