intにNumber値からデシリアライズする方法(エラー - Number値からデシリアライズする無INT / INT-引数のコンストラクタ/ファクトリメソッド)

ヴィオラ:

私は2つのクラスを持っているFlightTicket一つの飛行缶はチケットをたくさん持っているので、Ticket外部キーを持っていますflight_id

ここでは、テーブルと私のデータベースであるflightticket

ここでは、画像の説明を入力します。

ここに私ですjson request(Mozillaのデバッガから)、私はデータベースに保存したいです。

ここでは、画像の説明を入力します。

あなたが見ることができるflight_idパラメータを、私は私のそれをデータベースに保存することはできません、私はこのようなエラーを持っています:

at [Source: (PushbackInputStream); line: 1, column: 53] (through reference chain: dto.TicketDto["flight_id"]) DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance ofmodel.Flight (although at least one Creator exists): no int/Int-argument constructor/factory method to deserialize from Number value (199); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance ofmodel.Flight(although at least one Creator exists): no int/Int-argument constructor/factory method to deserialize from Number value

クラスのチケット:

@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

私のクラス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);
}

私のクラスでは、角度に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タイプの変更タイプとTickerDTOクラスで別のフライトの参照を追加します。フライトオブジェクトに変換するには、以下試してみてください。

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
}
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=188813&siteId=1