Как использовать только несколько полей объекта для службы REST - PullRequest
0 голосов
/ 24 августа 2018

Я создаю RESTful WS с помощью Spring. Теперь для каждого WS я создаю новые классы для нескольких объектов. А для конечной точки я использую эти классы в качестве данных запроса, и Джексон автоматически преобразует их, но что, если я хочу использовать только несколько полей этого объекта для другой конечной точки? Я не хочу создавать другой класс для этого.

Например, у меня есть модель:

public class Salary {

    /*
     * Request Params
     */
    @JsonProperty("ID")
    private String documentId;

    @JsonProperty("DOCUMENTDATE")
    private Date createdDate;

    @JsonProperty("DOCUMENTNUMBER")
    private String documentNumber;

    @JsonProperty("PAYERACCOUNT")
    private String payer;

    @JsonProperty("RECEIVERACCOUNT")
    private String receiver;

    @JsonProperty("AMOUNT")
    private Double amount;

    @JsonProperty("CURRCODE")
    private String currency;

    @JsonProperty("GROUND")
    private String ground;

    /* Getters & Setters */
    // etc
}

И конечная точка:

@PostMapping("salaries")
public Response createSalary(@RequestBody Salary salary) {
    return salaryManager.createSalary(salary);
}

// There I want to use not the whole fields of Salary, but only documentDate and documentNumber
@PostMapping("salaries/transfer")
public Response transferSalary(@RequestBody Salary salary) {
    return salaryManager.transferSalary(salary);
}

Итак, в приведенном выше примере во второй конечной точке я хочу принять в качестве запроса только несколько параметров класса Salary.

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Я не знаю, является ли это правильным решением, но я просто ожидаю, что, как обычно, тот же объект в запросе, и далее я просто проверяю нужные поля, и это все.

0 голосов
/ 24 августа 2018

Предполагая, что у вас есть следующий json, и вам не нужны все свойства двигателя,

 { 
       "name": "kia",
       "motor": {
          "created_date": "2017-01-01",
          "size": "1L",
          "power": "44kw",
       },
       "model": "rio",
       "country": "south korea",
       "currency": "USD",
       "price": "14000"
 }

вы можете смоделировать атрибут двигателя в вашем DTO в виде строки:

public class Car {

   public String name;
   // define the attribute, that you want to save flat as a String.
   private String motor;

   //or define specific attributes of the motor, that you want to parse.
   private String motorPower;

   // use the map as input and parse only the attributes that you need.
   @JsonProperty("motor")
   public String parseMotorAttributes(Map<String,Object> motorInfo) {
      StringBuilder sb = new StringBuilder();
      sb.append("size: ")
        .append((String)motorInfo.get("size"));

      this.motor = sb.toString();

      //set the concrete attributes you defined
      this.motorPower = (String)motorInfo.get("power");
      return this.motor;
   }

   public String country;

   public String currency;

   public String price;

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