Передача объекта класса в качестве параметра в Postman - PullRequest
0 голосов
/ 05 августа 2020

Я разрабатываю приложение API, однако у меня возникают трудности с конкретным методом.

Метод getCertificationPOJO отвечает за принятие Store в качестве параметра и поиск, существует ли это хранилище в база данных.

Теперь проблема в том, как я передаю объект Store в качестве параметра в Postman. Я пробовал передать его как строку 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 + '}';
    }
}

Скриншот почтальона

Ответы [ 3 ]

1 голос
/ 05 августа 2020

Я бы посоветовал не отправлять тело в запросе GET, см. Аналогичный ответ здесь

Маршрут параметров запроса, который предлагает @Murilo, является одним из способов, но если способ определения того, getCertificationPOJO уже существует в базе данных, зависит исключительно от идентификатора, тогда вам может потребоваться только отправить идентификатор, и в этом случае переменная пути будет лучше всего, как показано ниже, где {id} можно заменить фактическим идентификатором

GET /getCertObject/{id}

а потом в контроллере

@GetMapping("/getCertObject/{id}")
@ResponseBody
Optional<Certification> getCertificationPOJO(@PathVariable String id) {
  ...
}
0 голосов
/ 05 августа 2020

Если вы используете queryParams, вы должны передавать каждый ключ / параметр индивидуально, в вашем Postman вы заполняете так:

key: id          value: 1
key: name        value "asdasd"
key: phoneNumber value: "000"

(...)

Другой вариант - вы измените свою стратегию и передадите все json в ваше тело, но вам придется изменить свой RestController, чтобы получать @RequestBody вместо @ RequestParam

0 голосов
/ 05 августа 2020

В этом случае вы не используете раздел Params. Вы используете Body. Щелкните эту вкладку и поместите свой ОБЪЕКТ JSON в появившееся текстовое поле. Вам также необходимо установить CONTENT TYPE на JSON, выбрав правильное значение в COMBO, которое появляется справа от прикрепленного изображения.

Проверьте это:

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...