Как загрузить две загрузки двух моделей в @RequestBody за раз в Spring REST Controller

Я новичок в весне. Я хочу загрузить данные в две модели Trade и Skill. Пример написанного кода здесь - Код контроллера -

    @PostMapping("/create")
    public String Create(@RequestBody TradeSkill tradeskill) {
        System.out.println(tradeskill);
        return "record is created";
    }

Тело родительского запроса -

class TradeSkill {
    @Autowired
    protected Skill skill;
    @Autowired
    protected Trade trade;

    public TradeSkill() {
        super();
        // TODO Auto-generated constructor stub
    }
    @Override
    public String toString() {
        return "TradeSkill [skill = " + skill + ", trade = " + trade + "]";
    }
}

Json - это -

{
    "skill" : {
    "name" : "new skill"
    },
    "trade" : {
    "trade_name" : "Trade"
    }
}

Консольный вывод - TradeSkill [skill = null, trade = null]

Что я делаю неправильно. Любая помощь будет оценена.

Класс TradeSklll реализован неправильно. @Autowired не требуется. Нужен параметризованный конструктор и геттер-сеттер. Уроки торговли и навыков должны соответствовать тому же принципу.

bittu 15.11.2018 06:31

Я думаю, вам следует прочитать @Autowried, прежде чем использовать его :).

phuchoangmai 15.11.2018 06:33
0
2
167
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Пожалуйста, подумайте о следующем:

  1. Отбросьте @Autowired из TradeSkill, добавьте геттеры и сеттеры для полей trade и skill.

  2. Убедитесь, что поля name и tradeName в моделях Skill и Trade соответственно также имеют геттеры и сеттеры.

  3. Исправьте ваш запрос json, заменив trade_name на tradeName.

Как предположил @Bohdan Levchenko в своем ответе, классы должны выглядеть так:

TradeSkill.java

public class TradeSkill {
    protected Skill skill;
    protected Trade trade;

    public Skill getSkill() {
        return skill;
    }

    public void setSkill(Skill skill) {
        this.skill = skill;
    }

    public Trade getTrade() {
        return trade;
    }

    public void setTrade(Trade trade) {
        this.trade = trade;
    }

    @Override
    public String toString() {
        return "TradeSkill [skill = " + skill + ", trade = " + trade + "]";
    }
}

Trade.java

public class Trade {
    private String trade_name;

    public String getTrade_name() {
        return trade_name;
    }

    public void setTrade_name(String trade_name) {
        this.trade_name = trade_name;
    }
}

Skill.java

public class Skill {
    private String name;

    public String getName() {
        return name;
    }

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

Запрошенный JSON должен быть таким:

{
    "skill" : {
    "name" : "new skill"
    },
    "trade" : {
    "trade_name" : "Trade"
    }
}

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