Есть ли в классе аннотация Джексона json? - PullRequest
0 голосов
/ 31 января 2020

У меня есть класс контроллера с методом:

@RequestMapping(value = "/createchild", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void createChild(@RequestBody Child child) {
    childService.createChild(child);
}

И он работает, когда я использую это json:

{
    "childfullname":"Lok Maen",
    "password": "jfsddsf1",
    "phonenumber": "+79695426314"
}

Но если я хочу опубликовать что-то вроде этого:

    {
    "another parameter": "123",
    "child": {
        "childfullname":"Lok Maen",
        "password": "jfsddsf1",
        "phonenumber": "+79155426314"
    }
}

не работает.

Дочерний класс:

@Entity
@Table(name = "child", schema = "cheer")
public class Child {

    @Id
    @Column(name = "childid")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long childId;

    @JsonProperty("childfullname")
    @Column(name = "childfullname")
    private String childFullName;

    @JsonProperty("password")
    @Column(name = "password")
    private String password;
// another code
}

Как изменить код для размещения еще одного параметра в json теле?

1 Ответ

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

Вам нужно использовать 2 класса для достижения желаемого:

public class CreateChildRequestDTO {
   @JsonProperty("another parameter")
   private String anotherParameter;

   @JsonProperty("child")
   private ChildDTO child;
}

public class ChildDTO {
   @JsonProperty("childfullname")
   private String childFullName;

   @JsonProperty("password")
   private String password;

   @JsonProperty("phonenumber")
   private String phonenumber;
}

и изменить метод Controller на:

@RequestMapping(value = "/createchild", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void createChild(@RequestBody CreateChildRequestDTO createChildRequest ) {
    ...
}

Остерегайтесь того, что в вашем примере вы используете Entity класс как DTO, который является плохой практикой. Это объясняется здесь: Смешивание сущности с полезной нагрузкой (dto) при весенней загрузке - лучшая практика .

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