gpt4 book ai didi

java - 如何从 Number 值反序列化为 int(错误 - 没有 int/Int 参数构造函数/工厂方法从 Number 值反序列化)

转载 作者:太空狗 更新时间:2023-10-29 18:22:19 24 4
gpt4 key购买 nike

我有两个类 FlightTicket。一个航类可以有很多票,所以 Ticket 有外键 flight_id

这是我的数据库,包含表 flightticket

enter image description here

这是我的 json 请求(来自 Mozilla 调试器),我想将其保存在数据库中。

enter image description here

你可以看到flight_id参数,但是我不能把它保存到我的数据库中,我有这样的错误:

在[来源:(PushbackInputStream);行:1,列:53](通过引用链:dto.TicketDto["flight_id"])DefaultHandlerExceptionResolver:无法读取 HTTP 消息:
org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:无法构造
model.Flight 的实例(尽管至少存在一个 Creator):没有要反序列化的 int/Int 参数构造函数/工厂方法数值(199);嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造 model.Flight 的实例(尽管至少存在一个 Creator):没有要反序列化的 int/Int 参数构造函数/工厂方法来自数值

类(class)门票:

@Entity
@Table(name = "ticket")
public class Ticket {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int ticket_id;

@Column(name = "place")
private int place;

@Column(name = "name")
private String name;

@Column(name = "surname")
private String surname;

@JsonDeserialize(using = CustomParameterDeserializer.class)
@ManyToOne(targetEntity = Flight.class)
@JoinColumn(name = "flight_id")
@JsonBackReference("flight")
private Flight flight_id;

// getters setters
// constructor

类 TicketDto:

public class TicketDto {

private int ticket_id;

private int place;

private String name;

private String surname;

private Flight flight_id;

private Customer customer_id;

// getters setters

我类的航类:

@Entity
@Table(name = "flight")
public class Flight {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int flight_id;

//

@OneToMany(mappedBy = "flight_id")
@JsonManagedReference("flight")
private List<Ticket> ticket;

// getters setters

我的类(class) FlightDto:

public class FlightDto {
private int flight_id;

//

private List<TicketDto> ticket;

// getters setters

这里是 TicketServiceImpl 类,带有保存我的票证的方法:

@Service
public class TicketServiceImpl implements TicketService {

@Autowired
TicketRepository repository;

@Override
public Ticket save(TicketDto ticketDto) {
Ticket ticket = new Ticket();
ticket.setName(ticketDto.getName());
ticket.setSurname(ticketDto.getSurname());
ticket.setCustomer_id(ticketDto.getCustomer_id());
ticket.setFlight_id(ticketDto.getFlight_id());
ticket.setPlace(ticketDto.getPlace());

return repository.save(ticket);
}

Angular 中的我的类(class) ticket.ts:

export class Ticket {
ticket_id: number;
place: string;
customer_id: number;
flight_id: number;
name: string;
surname: string;
}

最佳答案

它期望您的 dto 类中有一个 int flight_id。将 flight_id 类型的类型更改为 Integer 并在 TickerDTO 类中添加另一个 Flight 引用。尝试以下将其转换为 Flight 对象:

public class TicketDto {
private int ticket_id;

private int place;

private String name;

private String surname;

private Flight flight;

private Customer customer_id;

@JsonProperty("flight_id")
private void unpackNested(Integer flight_id) {
this.flight = new Flight();
flight.setFlight_id(flight_id);
}

或者如果您不想更改您的 ticketDto 类,请将您的 json 更改为:

{
"name": "name",
"surname": "surname",
"flight_id": {
"flight_id" : 123
}
}

关于java - 如何从 Number 值反序列化为 int(错误 - 没有 int/Int 参数构造函数/工厂方法从 Number 值反序列化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53818314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com