How can I form JSON like that:
{
"error": false,
"errorCode": 0,
"message": [{
"id": "93",
"venueName": "Sushi Kuni",
"venueAddress": "10211 S De Anza Blvd Cupertino CA",
"showDate": "1531022400",
"showTime": "",
"description": ""
}, {
"id": "38",
"venueName": "Two Keys Tavern",
"venueAddress": "333 S Limestone Lexington KY",
"showDate": "1531368000",
"showTime": "8 pm - 1 am",
"description": ""
}]
}
I tried creating models with one-to-one, many-to-one relationships.
@Entity
@Table(name = "tutorials")
public class Tutorial {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tutorial_generator")
private int id;
@Column(name = "title")
private String title;
@Column(name = "description")
private String description;
@Column(name = "published")
private boolean published;
@Entity
@Table(name = "comments")
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "comment_generator")
private int id;
@Lob
private String content;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "tutorial_id", nullable = false)
@JsonIgnore
private Tutorial tutorial;
Controller:
public ResponseEntity<List<Comment>> getAllCommentsByTutorialId(@PathVariable(value = "tutorialId") int tutorialId) {
if (!tutorialRepository.existsById(tutorialId)) {
throw new ResourceNotFoundException("Not found Tutorial with id = " tutorialId);
}
List<Comment> comments = commentRepository.findByTutorialId(tutorialId);
return new ResponseEntity<>(comments, HttpStatus.OK);
}
But I got
[
{
"id": 1,
"content": "asdaasfaf"
},
{
"id": 3,
"content": "ssaduy7tjyjt"
},
{
"id": 4,
"content": null
}
]
I read about creating nodes, but didn't understand, how integrate it with spring data. What i need to nest table Comments in table Tutorials?
CodePudding user response:
Looks to me as if you are pretty close to the desired outcome. First of all you should add a member to your Tutorial entity:
@OneToMany(mappedBy = "tutorial_id")
private List<Comment> comments;
And the final missing part is making your controller return a tutorial instance:
public ResponseEntity<Tutorial> getTutorialWithComments(@PathVariable(value = "tutorialId") int tutorialId) {
Tutorial tutorial = tutorialRepository.findById(tutorialId)
.orElseThrows(() -> new ResourceNotFoundException("Not found Tutorial with id = " tutorialId));
return new ResponseEntity<>(tutorial, HttpStatus.OK);
}
I wrote this without any IDE assistance, so please excuse any mistakes. The idea should be clear though, you need to return a tutorial that contains a list of comments.