Как добавить поле массива JSON, сериализованное из хэш-набора связанных объектов при загрузке Spring - PullRequest
0 голосов
/ 01 марта 2020

У меня есть 2 сгенерированных JHispter сущности, связанных друг с другом: CategoryDTO:

public class CategoryDTO implements Serializable {

    private Long id;

    private String name;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
......

И MediaDTO:

public class MediaDTO implements Serializable {

private Long id;

private String title;


private Long categoryId;
.....

Ток JSON в ответе выглядит следующим образом:

    [ {
  "id" : 1,
  "name" : "Table"
}, {
  "id" : 2,
  "name" : "projection Versatile"
}....

Как добавить Set к ответу. Проще говоря, я хочу получить ответ JSON следующим образом:

    [ {
      "id" : 1,
      "name" : "Table",
      "media": [{"mediaID":"1","videoPath":"http://video1.mp4"},{"mediaID":"2","videoPath":"http://video5.mp4"},{"mediaID":"3","videoPath":"http://video2.mp4"}]
    }, {
      "id" : 2,
      "name" : "projection Versatile",
"media": [{"mediaID":"45465","videoPath":"http://video3451.mp4"},{"mediaID":"46","videoPath":"http://video445.mp4"},{"mediaID":"47","videoPath":"http://video4562.mp4"}]
    },....

Другими словами, как добавить еще один связанный объект в ответ в виде массива JSON (например, * media"json array)?

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Вы можете изменить CategoryDTO следующим образом -

...
private Long id;

private String name;

private Set<MediaDTO> meadiaList;
...
0 голосов
/ 01 марта 2020

Вы можете сделать что-то вроде этого:

class  CategoryDTO implements Serializable {

    private Long id;
    private String name;
    private Set<MediaDTO> media = new HashSet<>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<MediaDTO> getMedia() {
        return media;
    }

    public void setMedia(Set<MediaDTO> media) {
        this.media = media;
    }

}

class MediaDTO implements Serializable {

    private int mediaID;
    private String videoPath;

    public int getMediaID() {
        return mediaID;
    }

    public void setMediaID(int mediaID) {
        this.mediaID = mediaID;
    }

    public String getVideoPath() {
        return videoPath;
    }

    public void setVideoPath(String videoPath) {
        this.videoPath = videoPath;
    }

}

Затем в вашем контроллере вернуть этот объект:

@RestController
class CategoryController {

@GetMapping("/category")
public ResponseEntity<CategoryDTO> getCategory() {

        CategoryDTO categoryDTO = new CategoryDTO();
        categoryDTO.setId(1L);
        categoryDTO.setName("Table");


        //create media1 object;
        MediaDTO media1 = new MediaDTO();
        media1.setMediaID(1);
        media1.setVideoPath("http://video.path.com/1");

        //create media2 object;
        MediaDTO media2 = new MediaDTO();
        media2.setMediaID(2);
        media2.setVideoPath("http://video.path.com/2");

        categoryDTO.getMedia().add(media1);
        categoryDTO.getMedia().add(media2);
        return new ResponseEntity<>(categoryDTO, HttpStatus.OK);

}

}

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