Возникли проблемы с отправкой массива объектов JSON - PullRequest
0 голосов
/ 09 марта 2019

У меня есть следующие классы

// КОМПАНИЯ

@Entity
@Table(name=Company.TABLE_NAME)    
public class Company {

        public static final String TABLE_NAME = "company";
        public static final String PK_NAME = "id";

        @Id
        @Column(name="id")
        private String id = IdGenerator.createId(); 

        @ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.EAGER)
        @JoinColumn(name="categoryid", table=TABLE_NAME) 
        private Category category;

        @Column(name = "name", nullable=false, table=TABLE_NAME)
        @Size(min=2, max=60, message="LATER")
        private String name;

        @Column(name="domainName", nullable=true, table=TABLE_NAME)
        private String domainName;  

        @Column(name="registrationNumber", nullable=true, table=TABLE_NAME)
        private String registrationNumber;

        @Column(name="description", table=TABLE_NAME)
        private String description;

        @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
        @JoinColumn(name="itemId")
        private Set<Image> logos = new HashSet<>();

        @OneToMany(mappedBy="company", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
        private List<Branch> branches = new ArrayList<>();

        public Company() {}

        public void addBranch(Branch branch) {
            branch.setCompany(this);
            branch.getAddress().setActor(this);
            branches.add(branch);
        }

        public void addLogo(Image logo) {

        }

    // GETTERS AND SETTERS

    }

// ФИЛИАЛЫ

@Entity
@Table(name=Branch.TABLE_NAME)
public class Branch {

    public static final String TABLE_NAME = "branch";

    @Id
    @Column(name = "id")
    private String id = IdGenerator.createId();

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="address")
    private Address address;

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

    @ManyToOne
    @JoinColumn(name="company")
    private Company company;

    public Branch() {
        this.address.setAddressCategory(AddressCategory.BRANCH);
    }

// GETTERS AND SETTERS

}

// АДРЕС

@Entity  
@Table(name=Address.TABLE_ADDRESS) 
public class Address {

    public static final String TABLE_ADDRESS = "address";
    @Id
    @Column(name="id")
    private String id = IdGenerator.createId();   

    @Column(name="category", nullable=false)
    private AddressCategory addressCategory;;

    @Column(name="streetname", nullable=true)
    private String streetname;

    @Column(name="number", nullable=true)
    private String number;

    @Column(name="postcode", nullable=true)
    private String postcode;

    @Column(name="city", nullable=true)
    private String city;

    @Column(name="country", nullable=true)
    private String country;

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

    @Embedded
    private EmailAddress email;

    @Column(name="description", nullable=true)
    private String description;

// GETTERS AND SETTERS
}

// EMAIL

@Embeddable
public class EmailAddress {

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

    public EmailAddress() { }

    public EmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }

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

}

// COMPANY DTO

public class CompanyDTO {
    private String id;
    private String categoryId;  
    private String name;
    private String domainName;  
    private String registrationNumber;
    private String description;
    private List<Branch> branches = new ArrayList<>();

    public CompanyDTO fromCompany(Company company) {
        this.setId(company.getId());
        this.setName(company.getName());
        this.setDomainName(company.getDomainName());
        this.setRegistrationNumber(company.getRegistrationNumber());
        this.setDescription(company.getDescription()); 
        return this;
    }

    public Company toCompany(Company company) {
        company.setName(getName());
        company.setDomainName(getDomainName());
        company.setRegistrationNumber(getRegistrationNumber());
        company.setDescription(getDescription()); 
        //company.setLogo(new Image()); 
        company.setBranches(this.getBranches());
        return company;
    }

// GETTERS AND SETTERS
}

Метод контроллера:

@PostMapping(path = CREATE_COMPANY)
    public ResponseEntity<?> save(@RequestBody CompanyDTO dto){ System.out.println("__________COMPANY----------");
        Category category = categoryService.findById(dto.getCategoryId());
        Company company = dto.toCompany(new Company());

        company.setCategory(category);

        company.setLogos(new HashSet<Image>(Arrays.asList(new Image("garden", "garden.jpg", "/garden")))); 
        companyService.save(company); 
        return new ResponseEntity<> ("", HttpStatus.CREATED);
    } 

Это JSON, который я посылаю Почтальону:

{
"categoryId": "ee6e75c9-2d1b-41c1-8f12-236fbf907683",
"name": "McDonalds",
"domainName": "Vodafone.com",
"registrationNumber": "5555555",
"description": "Vodafone",
"branches": [
    {
        "telephone": "003325647895",
        "address": {
            "addressCategory": "BRANCH",
            "streetname": "Milkweg",
            "number": "50",
            "postcode": "3014",
            "city": "Vienna",
            "country": "Austria",
            "email": {"email": "example@mail.com"},
            "telephone": "003325647895",
            "description": "P. O. Box decription",
            "actor": "1abaaa11-1145-432f-84b0-40b9b551acdd"
        }
    }
],
"logos": []
}

И я получаю следующую ошибку в Почтальоне: 400Неверный запрос .Он даже никогда не отправляется на сервер, потому что это плохой запрос.

Если я удаляю объект внутри атрибута ветвей массива (пустой массив), то он работает.

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

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