[英]Convert Java object list to entity list
我的数组中有多个对象,使用 . 如果我随后使用 axios 将其发送到我的 Spring Boot 后端并预先输出 FormData,我会得到以下图像。 那适合。 然而,在后端,我需要这个对象列表作为一个实体。 在这种情况下,类型为 List。 我这样做吗?
前端代码:
let data = new FormData();
...
data.append("zugeordnet", JSON.stringify(personNamen));
await axios.post("/neuerEintrag", data,...)
反应:
后端:
@PostMapping("/neuerEintrag")
public String neuerEintrag(HttpServletRequest req,@RequestParam("zugeordnet") List<?> zugeordnet,..) {
List<User> userListe = (List<User>) zugeordnet;
for(User inListe : userListe) //ERROR here
{
System.out.println("USER :" + inListe);
}
...
}
java.lang.ClassCastException:类 java.lang.String 不能转换为类 com.home.calendar.User.User
更新
为了完整起见,这里是用户实体和新条目的完整方法。
@PostMapping("/neuerEintrag")
public String neuerEintrag(HttpServletRequest req, @RequestParam("beschreibung") String beschreibung,
@RequestParam("datum") Date datum, @RequestBody List<User> zugeordnet,
@RequestBody List<Freunde> kontaktAuswahl, @RequestParam("neuAlt") String neuAlt,
@RequestParam("kalenderId") int kalenderId) { }
用户实体:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@JsonIgnoreProperties("user")
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "user")
private List<Kalender> kalenderEinträge;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String name, List<Kalender> kalenderEinträge) {
super();
this.name = name;
this.kalenderEinträge = kalenderEinträge;
}
public List<Kalender> getKalenderEinträge() {
return kalenderEinträge;
}
[getter/setter]
Spring 无法解析未知对象。
为了让它发挥作用,我建议为“请求”开设一个新课程。
@Data // lombok - this generates getter/setters/equals/hashcode for you
public class NeuerEintragRequest {
private List<User> zugeordnet;
private String beschreibung;
private int kalendarId;
// and your others fields
}
控制器现在可以使用非常类型安全的对象。
@PostMapping("/neuerEintrag")
public String neuerEintrag(@RequestBody NeuerEintragRequest request) {
for(User user : request.getUserlist()) {
// a logging framework is a lot better. Try to use log4j or slf4j.
log.info("USER: {}", user);
}
...
}
让 axios 处理打字和序列化。 请参阅本教程: https ://masteringjs.io/tutorials/axios/post-json
要发布所有需要的数据,您可以创建一个新对象。
// no formdata - just send the object
const data = { zugeordnet: personNamen, kalendarId: 123, beschreibung: 'abc' };
await axios.post("/neuerEintrag", data);
您还可以在 typescript 中创建一个界面,但这对于 stackoverflow-answer 来说意义重大。 尝试了解更多关于 spring 和 typescript 的信息。
根据问题和评论,
你的前端调用data.append("zugeordnet", JSON.stringify(personNamen));
正在将您的对象转换为List<String>
而不是List<User>
。
因此,您可以在postMapping
中将此List<String>
转换为List<User>
:
@PostMapping("/neuerEintrag")
public String neuerEintrag(HttpServletRequest req,@RequestParam("zugeordnet") List<?> zugeordnet,..) {
ObjectMapper mapper=new ObjectMapper();
for(String str:zugeordnet){
System.out.println(mapper.readValue(str, User.class));
}
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.