Отправьте DTO в Spring Controller, параметры равны нулю

#javascript #java #spring-boot

#javascript #java #весенняя загрузка

Вопрос:

Я пытаюсь опубликовать список строк из моего интерфейса Javascript в Spring Boot Controller, по какой-то причине происходит публикация, но мои значения равны нулю. Есть ли что-то явно неправильное в моем коде?

Интерфейс:

 let bemsidList = new Array()
bemsidList[0] = "3129426";
bemsidList[1] = "240540";
let postData = { bemsids: bemsidList};

var xhr = new XMLHttpRequest();
xhr.open("POST", "/admin/delete-email", true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({
    postData
}));
  

Оболочка:

 public class EmailWrapper {
  List<String> bemsids;

  public List<String> getBemsids() {
    return bemsids;
  }

  public void setBemsids(List<String> bemsids) {
    this.bemsids = bemsids;
  }
}
  

Контроллер:

   @RequestMapping(
  value = "/admin/delete-email",
  method = RequestMethod.POST,
  consumes = "application/json")
public String deleteEmail(@RequestBody EmailWrapper wrapper, Model model) {
  List<String> ids = wrapper.getBemsids();
  for (String s : ids) {
    EmailEntity emailEntity = emailRepository.findByOwnerBemsid(s);
    emailRepository.delete(emailEntity);
  }

  model.addAttribute("category", "admin");
  model.addAttribute("subCategory", "email");

  return "pages/index";
}
  

Отладка — точка останова:

точка останова показывает, что getBemsids равен нулю

ids равно нулю

Ответ №1:

Аннотация requestbody используется для restful приложений и modelattribute для web mvc. вы смешиваете оба, и в этом проблема. Можете ли вы попробовать изменить requestbody с помощью modelattribute и использовать данные формы вместо запроса xhr для отправки данных из интерфейса.

Комментарии:

1. Спасибо за ваш ответ, к сожалению, добавление кавычек вокруг ключа, похоже, не помогает. Я все еще получаю пустой EmailWrapper в моем контроллере. Вот данные json, отправляемые на серверную часть: {«bemsids»:[«3129426″,»240540»]}

2. Какие аннотации вы используете, controller или restcontroller

3. Класс контроллера использует аннотацию контроллера. Метод использует аннотацию RequestMapping с методом, установленным в RequestMethod. Публикация

4. requestbody используется для restful приложений и modelattribute для web mvc. вы смешиваете оба, и в этом проблема. Можете ли вы попробовать изменить тело запроса с помощью modelattribute

5. Спасибо за ваше понимание. Я изменил dto во внешнем интерфейсе и превратил его в объект FormData, а аннотацию RequestBody заменил на ModelAttribute, и, похоже, сейчас у меня это работает. Если вы отредактируете свой ответ, я приму его. Спасибо!