Javascript AJAX вызов контроллера SpringBoot и получение ответа в JSON - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь поразить мой контроллер SpringBoot JSON, и для этого я использую AJAX. Я хочу, чтобы мой контроллер получил вызов AJAX, извлек JSON, работал со значениями и возвращал ответ JSON обратно в сценарий, который я затем каким-то образом использую.

Я не в состоянии понять, как кодировать мой контроллер для обработки AJAX, а также, если запрос должен быть POST или GET?

Вот мой код сценария:

<script>
    database.on('child_added', function (snapshot) {
        var data = {};
        data["FirstName"] = snapshot.val().FirstName;
        data["LastName"] = snapshot.val().LastName;
        data["Number"] = snapshot.val().Number;

        $.ajax({
          type: "GET",
          contentType: "application/json",
          url:"my-localhost/application/print",
          data: JSON.stringify(data),
          dataType: 'json',
          cache: false,
          success: function(){
            console.log("Successfully sent payload")
          },
          error: function(e){
            console.log("Error": , e)
          }
        });
</script>

Вот мой контроллер на данный момент. Я не знаю, как и что в нем изменить и как отправить ответ обратно в скрипт:

@RestController
@RequestMapping("/application")
public class AppController
{
    @GetMapping("/print")
    public void print()
    {
        System.out.println("Hello World");
    }
}

Ответы [ 2 ]

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

Просто он имеет три шага

  1. Создать Объект DTO (имя свойства должно соответствовать вашим JSON именам объектов)
  2. Пользователь @ RequestBody в вашем методе
  3. Используйте @ ReponseBody и просто верните объект.

Пример. Считайте, что вы хотите отправить некоторую информацию о пользователе, заняться делом и вернуть этого пользователя в javascript (UI).

  • Создать класс DTO для пользователя
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class UserDto {

    private Long id;
    private String name;
    private String family;
    private String password;
    private String username;
    private String nationalId;
    private String email;
    //Getters and Setters
    }
  • Поместите @ RequestBody и класс User в качестве ввода метода контроллера.

  • Просто верните объект пользователя.

 @RestController
 @RequestMapping("/application")
 public class AppController {

    //Changed to @PostMapping
    @PostMapping("/print")
    public User print(@RequestBody User user) {

        //Do whatever you want to user
        System.out.println("Hello World" + user.getUsername());
        return user;

    }
 }

Некоторые заметки

  • @ RequestBody , работает как конвертер для преобразования отправлено JSON классу java (преобразование пользователя JSON в класс User.class)

  • @ ResponseBody , обратное @RequestBody, оно преобразует java классов в JSON (конвертировать User.clas s в пользователя JSON)

  • Когда вы отправляете данные на сервер, вам лучше использовать POST вместо GET, GET OF POST

  • Имена свойств объекта DTO (family, id, ...) должны совпадать с именами ваших JSON свойств. В противном случае вы должны использовать @JsonProperty. Дополнительная информация о JsonProperty

  • Когда вы используете @ RestController , вам не нужно использовать @ResponseBody, потому что он находится в теле @ RestContoller

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

Я не могу понять, как кодировать мой контроллер для обработки AJAX, а также, если запрос должен быть POST или GET?

Ваш метод обслуживания аннотируется как @GetMapping("/print"), поэтому это должен быть GET запрос. Я предлагаю прочитать немного больше о различных методах HTTP и затем решить, какой из них вам подходит лучше всего.

Вот мой контроллер на данный момент. Я не знаю, как и что в нем изменить и как отправить ответ обратно в сценарий.

Вы должны возвращать объект, который инкапсулирует данные, которые вы хотите отправить обратно потребителю.

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