Как обработать запрос на поставку angular объекта JSON при весенней загрузке? - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь смоделировать среду, которая используется в этом видео. Здесь он использует this в качестве серверной части для хранения и извлечения данных из углового интерфейса.

Я хотел сделать то же самое, используя пружинную загрузку, как мой, и сделать вызовы покоя от внешнего интерфейса (Angular).

Я успешно получаю вывод запросов GET. Но не в состоянии работать с запросами PUT.

Я хочу отправить объект JSON на сервер, и сервер должен использовать его для выполнения каких-либо действий.

Клиентская сторона

Мой Угловой код для помещения объекта JSON выглядит следующим образом:

Услуги

updateTodo(todo:Todo):Observable<boolean>{
   return this.http.put<boolean>('http://localhost:8080/udateJsonData',todo,httpOptions);
}

My todo Определение класса переменной, которое находится в запросе put выше:

Модель

export class Todo{
    id:number;
    title:string;
    completed:boolean;
}

HttpOptions

const httpOptions = {
headers: new HttpHeaders({
 'Content-Type': 'application/json'
  })
}

Backend

А в пружинная загрузка на стороне сервера. У меня есть метод сопоставления вызова отдыха, который выглядит следующим образом:

RequestBody (модель)

@XmlRootElement
public class RequestBody {
   @JsonProperty int id;
   @JsonProperty String title;
   @JsonProperty boolean completed;
}

Контроллер

@RequestMapping(value = "/udateJsonData", method = RequestMethod.PUT)
@Consumes(MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody boolean udateJsonData(RequestBody requestBody) {
  System.out.println(requestBody.title);
  return false;
}

Проблема в том, что я получаю sysout как null .
Я попытался отладить и обнаружил, что мой requestBody сам по себе является нулевым.

Любая помощь будет оценена. Благодаря.

Ответы [ 2 ]

1 голос
/ 09 июня 2019

Я думаю, вы должны создать в Java объект POJO (например, TodoDTO), который имеет ту же структуру и типы, что и в Angular.

Затем вы использовали аннотацию @RequestBody в параметрах метода put:

@RequestMapping(value = "/udateJsonData", method = RequestMethod.PUT)
@Consumes(MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody boolean udateJsonData(@RequestBody TodoDTO todo) {
    System.out.println(todo.title);
    return false;
}
0 голосов
/ 09 июня 2019

Используйте @RequestBody аннотацию для получения данных

@RequestMapping(value = "/udateJsonData", method = RequestMethod.PUT)
@Consumes(MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody boolean udateJsonData(@RequestBody RequestBody requestBody) {
  System.out.println(requestBody.title);
  return false;
}

Вы можете использовать @ PutMapping

@PutMapping(value = "udateJsonData", consumes = MediaType.APPLICATION_JSON_VALUE)
public boolean udateJsonData(@RequestBody RequestBody requestBody) {
   System.out.println(requestBody.title);
   return false;
}
...