首页 > 解决方案 > 在 Postman 中将类对象作为参数传递

问题描述

我正在开发一个 API 应用程序,但是我在使用特定方法时遇到了困难。

getCertificationPOJO方法负责将 Store 作为参数并搜索该存储是否存在于数据库中。

现在这里的问题是如何在 Postman 中将 Store 对象作为参数传递。我尝试将它作为 JSON 字符串传递,但这不起作用。

为糟糕的编辑道歉

认证控制器

@Controller
public class CertController {

    @Autowired
    private CertificationRepository certRepo;
    @Autowired
    private StoreRepository StoreRepository;

    
    @GetMapping(value = "/getCertObject")
    public @ResponseBody
    Optional<Certification> getCertificationPOJO(@RequestParam Store store)
    {return Lists.newArrayList(certRepo.findAll()).stream().filter(e->e.getStore() == store).findFirst();}

}

商店类

@Entity
@Table(name = "store")
public class Store implements com.halal.abstractions.Entity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @JsonIgnore
    @OneToOne(optional = true) // By default this is set to true so technically this is redundant but, yea lets
                               // just keep it there
    private Certification certification;

    @NotNull
    @Column(nullable = false)
    private String name;

    private String phoneNumber;

    @NotNull
    @Column(nullable = false)
    private String address;

    @NotNull
    @Column(nullable = false)
    private double latitude;

    @NotNull
    @Column(nullable = false)
    private double longitude;

    @NotNull
    @Column(nullable = false)
    private Date dateAdded;

    static final DateFormat DF = new SimpleDateFormat("dd/MM/yyyy");

    protected Store() {
    }

    public Store(String name, String phoneNumber, String address, double latitude, double longitude) {
        this.name = name;
        this.setPhoneNumber(phoneNumber);
        this.setAddress(address);
        this.latitude = latitude;
        this.longitude = longitude;
        this.dateAdded = new Date(System.currentTimeMillis());
    }
    @Override
    public Long getId() {
        return this.id;
    }
    @Override
    public void setId(long id) {
        this.id = id;
    }
    @Override
    public String getName() {
        return name;
    }
    @Override
    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public Double getLatitude() {
        return this.latitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public Double getLongitude() {
        return this.longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    @Override
    public String getDateAdded() {
        return DF.format(dateAdded);
    }

    @Override
    public void setCertification(Certification certification) {
        this.certification = certification;
    }
    @Override
    public Certification getCertification() {
        return this.certification;
    }

    @Override
    public String toString() {
        return "Store{" + "id=" + id + ", certification=" + certification + ", name='" + name + '\'' + ", phoneNumber='"
                + phoneNumber + '\'' + ", address='" + address + '\'' + ", latitude=" + latitude + ", longitude="
                + longitude + ", dateAdded=" + dateAdded + '}';
    }
}

认证等级

@Entity
@Table(name = "certification")
public class Certification {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @NotNull
    @Column(nullable = false)
    private boolean isCertified;

    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "id")
    @JsonIgnore
    private Store store;

    public Certification() {
    }

    public long getId() {
        return this.id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public Store getStore() {
        return this.store;
    }

    public void setStore(Store store) {
        this.store = store;
    }

    public boolean isIsCertified() {
        return this.isCertified;
    }

    public void setIsCertified(boolean isCertified) {
        this.isCertified = isCertified;
    }

    @Override
    public String toString() {
        return "Certification{" + "id=" + id + ", isCertified= " + isCertified + '}';
    }
}

邮递员截图

标签: javaspring-bootrestpostman

解决方案


我建议不要在 GET 请求中发送正文,请在此处查看类似的答案

@Murilo 建议的查询参数路由是一种方式,但如果确定数据库中是否已经存在 getCertificationPOJO 的方式仅取决于 id,那么您可能只需要发送 id 在这种情况下,路径变量最好如下所示其中 {id} 可以替换为实际 ID

GET /getCertObject/{id}

然后在控制器中

@GetMapping("/getCertObject/{id}")
@ResponseBody
Optional<Certification> getCertificationPOJO(@PathVariable String id) {
  ...
}

推荐阅读