Mam dwie klasy modeli. jeden z nich to użytkownik, a drugi to stopień naukowy. każdy użytkownik może uzyskać więcej niż jeden stopień. Chcę wysłać listę stopni wraz z Json, kiedy tworzę nowego użytkownika w postbody.
Moja klasa użytkowników w ten sposób:
@Entity
@Table(name = "USERS")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name = "";
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "USER_DEGREE",
joinColumns = @JoinColumn(name = "USER_FK"),
inverseJoinColumns = @JoinColumn(name = "DEGREE_FK")
)
private List<Degree> degreeList = new ArrayList<>();
public User setDegreeList(List<Degree> degreeList) {
this.degreeList = traitList;
return this;
}
public User setId(long id) {
this.id = id;
return this;
}
public User setName(String name) {
this.name = name;
return this;
}
}
A klasa stopnia ma 3 identyfikator atrybutu, tytuł, punkt.
W moim kontrolerze chcę, gdy używam @RequestBody
, aby uzyskać plik json użytkownika w treści, uzyskać wszystkie stopnie użytkownika.
Na przykład mój kontroler:
@RequestMapping(value = "/user/add",method = RequestMethod.POST)
@ResponseBody
public Object sendTechnicalMessage(
HttpServletRequest request,
@RequestBody User user
){
return userService.createNewUser(request,user);
}
I moje ciało json w ten sposób:
{
name:"abc",
degreeList:[1,2,4,6] // or [{id:1},{id:2},{id:4}]
}
Jak to zrobić?
1 odpowiedź
2 drogi:
Możesz utworzyć klasę DTO z polem
Set<Long>
zamiastList<Degree>
, przekonwertować obiekt użytkownika na ten obiekt UserDTO i zwrócić go.Możesz użyć tej klasy User, ale z konkretnym Serializatorem. W tym celu zanotuj pole za pomocą
@JsonSerialize(using = SomeSerializer.class)
i zaimplementuj ten serializator implementującyJsonSerializer<Long>
(lubSet<Long>
- nie mogę teraz powiedzieć, to tylko pomysł).
Uwaga: pamiętaj, że pola @ManyToMany
są domyślnie leniwe (i prawie zawsze muszą być leniwe), więc użyj @Transactional
, aby uzyskać kolekcję bez wyjątku.
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].