разбирать и отображать JSON с помощью почтальона - PullRequest
0 голосов
/ 29 января 2019
@Controller
public class StudentRegistrationController {

@RequestMapping(method = RequestMethod.POST, value="/register/reg")
@ResponseBody
StudentRegistrationReply registerStudent(@RequestBody Student student) {
    System.out.println("In registerStudent");
    StudentRegistrationReply stdregreply = new StudentRegistrationReply();           

    StudentRegistration.getInstance().add(student);

    //We are setting the below value just to reply a message back to the caller
    stdregreply.setId(student.getId());
    stdregreply.setName(student.getName());
    stdregreply.setAge(student.getAge());
    stdregreply.setRegistrationNumber(student.getRegistrationNumber());
    stdregreply.setPayment_detailsList(student.getPayment_detailsList());
    stdregreply.setRegistrationStatus("Successful");

    daocontroller.setStudentRegistration(stdregreply);
    return stdregreply;

}

}

пытается сопоставить запрос почтальона, но получает ноль

json похож на

{ 
    "id": 300,
    "name": "kukri",
    "age": 26,
    "registrationNumber": "54326",
    "Student_payment_details":
    {
      "pay": 50000,
      "date": "23061994",
      "phcounter": "SKB"
    }

}

Java-классы

public class Student {
    private int id;
    private String name;
    private int age;
    private String registrationNumber;
    private Student_payment_details payment_detailsList; //getter and setter
}

1 Ответ

0 голосов
/ 29 января 2019
  1. Используя Lombok в качестве моих методов получения / установки, вы можете игнорировать его и писать свои собственные методы получения / установки
  2. Существует проблема с телом вашего запроса, вы должны передать ключ в json как переменную javaимя, вы передаете Student_payment_details вместо payment_detailsList
  3. Методы получения и установки должны соответствовать имени вашей переменной.

URL запроса:

curl -X POST \
  http://localhost:8080/register/reg \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
  "id": 300,
  "name": "kukri",
  "age": 26,
  "registrationNumber": "54326",
  "payment_detailsList": {
    "pay": 50000,
    "date": "23061994",
    "phcounter": "SKB"
  }
}'

Java Dtos:

import lombok.Data;

@Data
public class Student_payment_details {
    int pay;
    String date;
    String phcounter;
}

import lombok.Data;

@Data
public class Student {
    private int id;
    private String name;
    private int age;
    private String registrationNumber;
    private Student_payment_details payment_detailsList; //getter and setter
}

На следующем рисунке показано содержимое переменной ученика, заполненной внутри контроллера

enter image description here

Примечание:Я не знаю ваш вариант использования, но в качестве общего предложения, пожалуйста, следуйте 1 типу соглашения о присвоении имен, snake_case или camelCase.
В Java чаще всего используется camelCase.
Также следует присвоить имя переменнойбыть похожим на тип класса,
здесь переменная payment_detailsList имеет тип Student_payment_details, что приводит к путанице, если вы хотите, чтобы имя переменной JSON отличалось, вы можете использовать как

 @JsonProperty("payment_detailsList")
 private Student_payment_details student_payment_details;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...