В теле ответа http будет пустой массив, если я просто верну массив Java Экземпляров в Spring Boot - PullRequest
0 голосов
/ 10 января 2020

Я возвращаю массив Java Экземпляров в моем проекте Spring-Boot-Get-Started.

package com.wepay.business.resource;

import com.wepay.business.model.Good;
import com.wepay.business.repo.GoodRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@CrossOrigin(origins = {"http://localhost:3000", "http://localhost:9000", "http://localhost:8083"})
@RestController
@RequestMapping("/api")
public class GoodResource {
    @Autowired
    GoodRepository repository;

    @GetMapping("/getGood")
    public List<Good> getAllGoods() {
        List<Good> goods = new ArrayList<>();
        repository.findAll().forEach(goods::add);
        return goods;
    }
}
package com.wepay.business.repo;

import com.wepay.business.model.Good;
import org.springframework.data.repository.CrudRepository;

public interface GoodRepository extends CrudRepository<Good, Long> {

}
package com.wepay.business.model;

import javax.persistence.*;


@Entity
@Table(name = "good")
public class Good {

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

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

  @Column(name = "price")
  private double price;

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

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

  @Column(name = "amount")
  private int amount;

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

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

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

  public Good(){

  }

  public Good(String name, Double price, String info, int amount) {
    this.name = name;
    this.price = price;
    this.info = info;
    this.amount = amount;
  }

  public Good(Long id, String goodName, Double unitPrice, String goodInfo, int amount) {
      this(goodName, unitPrice, goodInfo, amount);
      this.id = id;
  }

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

Значение goods - это массив Java Instacnes enter image description here Но в теле ответа http есть только пустой массив.

enter image description here

Полагаю, мне следует возвращает массив JSON объектов, а не Java экземпляров.

Нужно ли преобразовывать Java экземпляры в JSON объекты? Если да, есть ли какие-либо рамки, которые помогут нам выполнить эту работу?

Я был заблокирован этой проблемой с прошлой недели. Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 10 января 2020

Проблема заключается в том, что в вашем классе Good нет получателей (по крайней мере, из того, что я вижу в вашем посте). Добавьте геттеры, и это должно сработать.

Я думаю, что вы можете использовать JpaRepository<T, ID> вместо CrudRepository<T, ID>, поэтому в этом случае нет необходимости создавать еще один List<Good>, потому что repository.findAll() уже возвращает List<Good> внутри JpaRepository, хотя, между прочим, он также должен работать нормально.

Нужно ли конвертировать Java Экземпляры в JSON объекты? Если да, то есть ли какая-либо основа, которая поможет нам выполнить эту работу?

Нет. Spring уже сделал это для вас, используя сериализатор Джексона.

0 голосов
/ 10 января 2020

Если нет особой c причины для использования CrudRepository, вы можете изменить ее на JpaRepository

Таким образом вы можете избежать преобразования Iterator в List и использовать его следующим образом.

public interface GoodRepository extends JpaRepository<Good, Long> {

}

// Controller
@GetMapping("/getGood")
public List<Good> getAllGoods() {
    return repository.findAll();
}

Кроме того, убедитесь, что установщик геттера установлен для каждого постоянного поля.

0 голосов
/ 10 января 2020

попробуй return repository.findAll();

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