Java应用程序返回curl : (23) Failed writing body (0 ! = 8042)

标签 java rest curl terminal

我使用 Spring boot 应用程序,一些端点返回错误

 $ curl -X PUT http://localhost:8080/api/v1/users/calculateReward?userId=1   |jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0parse error: Exceeds depth limit for parsing at line 1, column 6472
100 81714    0 81714    0     0  1641k      0 --:--:-- --:--:-- --:--:-- 1662k
curl: (23) Failed writing body (0 != 7978)

我还收到类似解析错误:第 1 行第 9 列无效的数字文字 的错误。

我认为这与管道分离器有关,但我以前使用过它,没有出现问题。

当我调试时,我得到这样的东西 方法抛出“java.lang.StackOverflowError”异常。无法评估 com.user.reward.models.RewardList.toString()

提供了我的模型的类,

@Entity
public class User {

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

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

    @Column(name = "countryName")
    @NotNull
    @NotEmpty
    private String countryName;


    /*
     * total steps is for the keepign the history of the user movement
     * */
    @Column(name = "totalSteps")
    @Min(value = 0L, message = "The value must be positive")
    private int totalSteps;

    /*
     * current steps is for providing the user reward. We will need to set
     * it to zero after processing the user payment
     * */
    @Column(name = "currentSteps")
    @Min(value = 0L, message = "The value must be positive")
    private int currentSteps;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<RewardList> rewardLists = new ArrayList<>();

    public User() {

    }

    public User(@NotNull @NotEmpty String name, @NotNull @NotEmpty String countryName) {
        this.name = name;
        this.countryName = countryName;
    }

    public User(@NotNull @NotEmpty String name, @NotNull @NotEmpty String countryName, @Min(value = 0L, message = "The value must be positive") int totalSteps) {
        this.name = name;
        this.countryName = countryName;
        this.totalSteps = totalSteps;
    }


    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCountryName() {
        return countryName;
    }

    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }

    public int getTotalSteps() {
        return totalSteps;
    }

    public void setTotalSteps(int totalSteps) {
        this.totalSteps = totalSteps;
    }

    public int getCurrentSteps() {
        return currentSteps;
    }

    public void setCurrentSteps(int currentSteps) {
        this.currentSteps = currentSteps;
    }

    public List<RewardList> getRewardLists() {
        return rewardLists;
    }

    public void setRewardLists(RewardList rl) {
        this.rewardLists.add(rl);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User)) return false;
        User user = (User) o;
        return getTotalSteps() == user.getTotalSteps() &&
                getCurrentSteps() == user.getCurrentSteps() &&
                getId().equals(user.getId()) &&
                getName().equals(user.getName()) &&
                getCountryName().equals(user.getCountryName()) &&
                getRewardLists().equals(user.getRewardLists());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getId(), getName(), getCountryName(), getTotalSteps(), getCurrentSteps(), getRewardLists());
    }


    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", countryName='" + countryName + '\'' +
                ", totalSteps=" + totalSteps +
                ", currentSteps=" + currentSteps +
                ", rewardLists=" + rewardLists +
                '}';
    }
}





@Entity
public class RewardList {

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

    @Column(name = "reward")
    @Min(value = 0L, message = "The value must be positive")
    private double reward;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", nullable = false)
    private User user;

    public RewardList() {
    }

    public RewardList(User user) {
        this.user = user;
    }

    public RewardList(@Min(value = 0L, message = "The value must be positive") double reward) {
        this.reward = reward;
    }


    public Long getId() {
        return id;
    }

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

    public double getReward() {
        return reward;
    }

    public void setReward(double reward) {
        this.reward = reward;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof RewardList)) return false;
        RewardList list = (RewardList) o;
        return Double.compare(list.getReward(), getReward()) == 0 &&
                getId().equals(list.getId()) &&
                getUser().equals(list.getUser());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getId(), getReward(), getUser());
    }


    @Override
    public String toString() {
        return "RewardList{" +
                "id=" + id +
                ", reward=" + reward +
                ", user=" + user +
                '}';
    }
}

我在 OS X 终端,该问题的解决方案是什么?

最佳答案

当使用 toString() 显示 RewardListUser 实体时,它们之间存在循环依赖关系。用户 A 将显示奖励 B,而奖励 B 将显示用户 A,而用户 A 将显示奖励 B...直到您从递归 toString() 中得到 StackOverflowError

您可以通过以下任一方式解决该问题:

  1. 不在 User.toString() 中显示 rewardLists 关系数据
  2. 不在 RewardList.toString() 中显示用户关系数据

我会选择选项 1,因为 User 是此关系的拥有实体。

关于Java应用程序返回curl : (23) Failed writing body (0 ! = 8042),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55628728/

相关文章:

Angular Service Worker - Rest API 数据

xslt - DataPower 文件传输返回 base64

php - 在 php 中使用 curl 登录页面,然后访问链接 "logged in"

php - 使用 PHP + Curl 固定 TLS 公钥?

java - 将多个 JTable 作为一个作业打印——Book 对象仅打印第一个表

Java 正则表达式模式匹配正向前瞻

javascript - 无法解析对 Kinvey 后端的批量 JSON POST 请求

java - 如何在 Eclipse 中找出某个方法是直接还是间接从另一个方法调用的?

java - 如何在我的 Eclipse 中使用逆向工程

Node.js:GET 请求返回 404 Not Found