Как исправить: отсутствует обязательное тело запроса: [org.springframework.http.converter.HttpMessageNotReadableException:]

Я обновляю логический столбец в своей базе данных для утверждения учетных записей клиентов с помощью угловой кнопки внешнего интерфейса. Как только я отправляю свой запрос, мой контроллер выдает ошибку Resolved [org.springframework.http.converter.HttpMessageNotReadableException:Required request body is missing:. Пытались отладить его и были бы признательны за некоторые рекомендации по этому поводу.

Мой код пока выглядит следующим образом:

контроллер:

@RequestMapping(value = "/customers/afisapprove", method = 
RequestMethod.POST)
public ResponseEntity<?> updCustAfisStatus(@RequestBody Customer 
customer) throws Exception {
    try {
        System.out.println("account no##" + 
customer.getAccountNumber());
        System.out.println("afis no##" + 
customer.getAfisStatus());
        System.out.println("afis id##" + customer.getId());

        int approveCust = 
customerService.approveAfisCustomer(customer.isActive());

        // begin saving audit trail
        auditTrail = new AuditTrail((customer.getCreatedBy()), "Approved Customer " + customer.getFullName(), date,
                "Approve Customer");
        auditTrailService.saveAuditTrail(auditTrail);
        System.out.println("approved##" + approveCust);
        if (approveCust > 0) {
            // int trash = customerService.trashAfisBio(customer.getId());
            // if (trash <= 0 ) {
            // return new ResponseEntity<>(new CustomResponse(CustomResponse.APIV,
            // 200,false,
            // "failed to trash raw images"),HttpStatus.OK);
            // }
            return new ResponseEntity<>(
                    new CustomResponse(CustomResponse.APIV, 200, true, "customer approved successfully"),
                    HttpStatus.OK);

        }
        return new ResponseEntity<>(
                new CustomResponse(CustomResponse.APIV, 200, false, "failed to approve customer"), HttpStatus.OK);
    } catch (Exception e) {
        return new ResponseEntity<>(
                new CustomResponse(CustomResponse.APIV, 200, false, "Server error processing request"),
                HttpStatus.OK);
    }
}

класс сущности:

@Entity
@Table(name = "Customerr")
public class Customer extends BaseModel implements Serializable{

    private static final long serialVersionUID = 1L;

    @Column(name = "account_number")
    private String accountNumber;

    @Column(name = "teller_id")
    private String tellerId;

    @Column(name = "active")
    private boolean active=false;

    @Column(name = "branchId")
    private String branchId;

    @Column(name = "dateOfBirth")
    private String dateOfBirth;

    @Column(name  = "emailAddress")
    private String emailAddress;

    @Column(name = "fullName")
    private String fullName;

    @Column(name = "gender")
    private String gender;

    @Column(name = "idNumber")
    private String idNumber;

    @Column(name = "phoneNumber")
    private String phoneNumber;

    @Column(name = "postalAddress")
    private String postalAddress;

    @Column(name = "postalCode")
    private String postalCode;

    @Column(name = "postalTown")
    private String postalTown;

    @Column(name = "created_on",columnDefinition = "datetime default getDate()")
    private Date createdOn;

    @Column(name = "afisid")
    private String pbuno;

    @Column(name = "userProfile",columnDefinition = "varchar(max)")
    private String profilePic;

    @Column(name = "verified")
    private String approved;

    @Column(name = "verified_by")
    private int approvedBy;

    @Column(name = "created_by", nullable = false)
    private int createdBy;

    @Column(name = "verified_on")
    private Date approvedOn;

    @Column(name = "afis_status")
    private String afisStatus;

    @OneToMany(fetch=FetchType.LAZY,cascade = CascadeType.ALL)
    @JoinColumn(name = "customer_id")
    private List<CustomerBio> bios;

    @OneToMany(fetch=FetchType.LAZY,cascade = CascadeType.ALL)
    @JoinColumn(name = "customer_id")
    private List<RawImages> raws;

    public Customer() {
        super();

    }

    public Customer(String accountNumber, String tellerId, boolean active, String branchId, String dateOfBirth, String emailAddress,
            String fullName, String gender, String idNumber, String phoneNumber, String postalAddress,
            String postalCode, String postalTown, Date createdOn, String pbuno, String profilePic, String approved,
            int approvedBy, Date approvedOn, List<CustomerBio> bios,String afisStatus,List<RawImages> raws,int createdBy) {
        super();
        this.tellerId = tellerId;
        this.accountNumber = accountNumber;
        this.active = active;
        this.branchId = branchId;
        this.dateOfBirth = dateOfBirth;
        this.emailAddress = emailAddress;
        this.fullName = fullName;
        this.gender = gender;
        this.idNumber = idNumber;
        this.phoneNumber = phoneNumber;
        this.postalAddress = postalAddress;
        this.postalCode = postalCode;
        this.postalTown = postalTown;
        this.createdOn = createdOn;
        this.pbuno = pbuno;
        this.profilePic = profilePic;
        this.approved = approved;
        this.approvedBy = approvedBy;
        this.approvedOn = approvedOn;
        this.bios = bios;
        this.afisStatus=afisStatus;
        this.raws=raws;
        this.createdBy=createdBy;
    }

    public int getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(int createdBy) {
        this.createdBy = createdBy;
    }

    public String getAfisStatus() {
        return afisStatus;
    }

    public void setAfisStatus(String afisStatus) {
        this.afisStatus = afisStatus;
    }

    public String getApproved() {
        return approved;
    }

    public void setApproved(String approved) {
        this.approved = approved;
    }

    public int getApprovedBy() {
        return approvedBy;
    }

    public void setApprovedBy(int approvedBy) {
        this.approvedBy = approvedBy;
    }

    public Date getApprovedOn() {
        return approvedOn;
    }

    public void setApprovedOn(Date approvedOn) {
        this.approvedOn = approvedOn;
    }

    public String getAccountNumber() {
        return accountNumber;
    }

    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }

    public String getTellerId() {
        return tellerId;
    }

    public void setTellerRef(String tellerId) {
        this.tellerId = tellerId;
    }

    public boolean isActive() {
        return active;
    }

    public void setActive(boolean active) {
        this.active = active;
    }

    public String getBranchId() {
        return branchId;
    }

    public void setBranchId(String branchId) {
        this.branchId = branchId;
    }

    public String getDateOfBirth() {
        return dateOfBirth;
    }

    public void setDateOfBirth(String dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }

    public String getEmailAddress() {
        return emailAddress;
    }

    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getIdNumber() {
        return idNumber;
    }

    public void setIdNumber(String idNumber) {
        this.idNumber = idNumber;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

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

    public String getPostalAddress() {
        return postalAddress;
    }

    public void setPostalAddress(String postalAddress) {
        this.postalAddress = postalAddress;
    }

    public String getPostalCode() {
        return postalCode;
    }

    public void setPostalCode(String postalCode) {
        this.postalCode = postalCode;
    }

    public String getPostalTown() {
        return postalTown;
    }

    public void setPostalTown(String postalTown) {
        this.postalTown = postalTown;
    }

    public Date getCreatedOn() {
        return createdOn;
    }

//    @PrePersist
    public void setCreatedOn() {
        this.createdOn = new Date();
    }

//    public List<CustomerBio> getBios() {
//        return bios;
//    }
//
//    public List<RawImages> getRaws() {
//        return raws;
//    }
//
//    public void addBio(CustomerBio bio) {
//        bio.setCustomer(this);
//        bios.add(bio);
//    }
//
//    public void addRaw(RawImages raw) {
//        raw.setCustomer(this);
//        raws.add(raw);
//    }

    public String getPbuno() {
        return pbuno;
    }

    public void setPbuno(String pbuno) {
        this.pbuno = pbuno;
    }

    public int getColumnCount() {
        return 7;
    }

    public String getProfilePic() {
        return profilePic;
    }

    public void setProfilePic(String profilePic) {
        this.profilePic = profilePic;
    }

    @Override
    public String toString() {
        return "Customer{" + "accountNumber = " + accountNumber + ", fullName = " + fullName + ", dateOfBirth = " + dateOfBirth + '}';
    }
}

json:

       {
            "Id": 13,
            "name": "KABALIISA SCOVIA",
            "afisid": "PBU433369",
            "active": false,
            "branchId": "1",
            "dateOfBirth": "2019-03-07",
            "emailAddress": "[email protected]",
            "fullName": "Nelson",
            "gender": "Male",
            "idNumber": "90785634",
            "phoneNumber": "0721234567",
            "postalAddress": "8445",
            "postalCode": "00200",
            "postalTown": "Mombasa",
            "userProfile": "",
            "createdBy": 0
        }, 

оказание услуг:

public int approveAfisCustomer(boolean active) {
        // TODO Auto-generated method stub
        return Customerrepository.approveAfisCustomer(active);
    }

Я действительно не знаю, что я делаю неправильно. Как я могу это исправить и понять причину ошибки?

Пожалуйста, проверьте json, который получает от внешнего интерфейса, содержимое в json должно соответствовать классу Customer. @RequestBody Customer customer. Кажется, запрос не то, что он ожидает.

Nikhil Zurunge 28.05.2019 09:39

Можете ли вы предоставить детали запроса, который вы отправляете, вместе со структурой класса Customer? Если JSON для клиента отсутствует в теле HTTP-запроса (или имеет неправильный формат), вы получите это сообщение.

Rob Scully 28.05.2019 09:49

@роб-Скалли @RequestBody Customer customer моя сущность. Я также меняю флаг isActive()); на активный в db. Или как изменить этот json?

Nelson Kimaiga 28.05.2019 09:51

@codeslayer да, я понимаю. Но json, который вы предоставляете в запросе, который представляет клиента, должен соответствовать структуре вашего класса Customer. Не могли бы вы предоставить json в теле запроса, который вы отправляете в свою службу, вместе с содержимым класса Customer?

Rob Scully 28.05.2019 09:59

@rob-scully проверьте выше обновленный пост с json

Nelson Kimaiga 28.05.2019 10:05

@codeslayer спасибо, теперь вы можете опубликовать свой класс Customer?

Rob Scully 28.05.2019 10:07

@rob-scully обновил пост с классом Customer

Nelson Kimaiga 28.05.2019 10:10

Таким образом, используемый вами JSON не соответствует JSON в объекте cusotmer, что приводит к сбоям привязки. Например, возьмите «Id»: 13 в вашем JSON. В вашем клиенте у вас есть TellerId, который является строкой. Правильным способом представления и привязки этого в JSON будет «tellerId»: «13». Поле «имя» не существует в классе Customer, скорее у вас есть «fullName». Имена полей в вашем json ДОЛЖНЫ совпадать с именами полей в вашем классе Customer. Как только вы разрешите их, запрос будет корректно привязан.

Rob Scully 28.05.2019 10:17
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
8
3 538
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В опубликованном JSON следующие атрибуты не совпадают с @RequestBody Customer. Измените соответствующим образом.

  {
            "Id": 13,
            "name": "KABALIISA SCOVIA",
            "afisid": "PBU433369",

            "userProfile": "",

        },

Другие вопросы по теме