亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法構造“類名”的實例(盡管至少在 Creator 上存在)

無法構造“類名”的實例(盡管至少在 Creator 上存在)

喵喔喔 2022-07-20 20:38:58
我有以下類,我將其用作請求有效負載:public class SampleRequest {    private String fromDate;    private String toDate;    // Getters and setters removed for brevity.}我正在嘗試將其與以下資源一起使用(只是嘗試將其打印到屏幕上以查看發生的情況):@PostMapping("/getBySignatureOne")public ResponseEntity<?> getRequestInfo(@Valid @RequestBody SampleRequest signatureOneRequest) {    System.out.println(signatureOneRequest.getToDate);    System.out.println(signatureOneRequest.getFromDate);}這是我發送的 JSON 請求:{    "fromDate":"2019-03-09",    "toDate":"2019-03-10"}這是我得到的錯誤:Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.test.app.payload.SampleRequest` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('fromDate'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.test.app.payload.SampleRequest` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('fromDate') at [Source: (PushbackInputStream); line: 1, column: 2]]我很想知道這里出了什么問題,我懷疑這是構造函數的問題,或者我在某處遺漏了一些注釋,但老實說我不確定我哪里出錯了。
查看完整描述

2 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

您需要一個帶有所有參數的構造函數:


public SampleRequest(String fromDate, String toDate) {


    this.fromDate = fromDate;

    this.toDate = toDate;


}

或使用@AllArgsConstructor或@Data來自龍目島。


查看完整回答
反對 回復 2022-07-20
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

您需要編寫自定義反序列化器,因為它無法將字符串(fromDate 和 toDate)解析為 Date


{ "fromDate":"2019-03-09", "toDate":"2019-03-10" }


這個鏈接有一個教程開始使用自定義反序列化器https://www.baeldung.com/jackson-deserialization


反序列化器可以這樣寫。


public class CustomDateDeserializer extends StdDeserializer<Date> {


private static SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");


public CustomDateDeserializer() {

    this(null);

}


public CustomDateDeserializer(Class<?> vc) {

    super(vc);

}


@Override

public Date deserialize(JsonParser jsonparser, DeserializationContext context) throws IOException {

    String date = jsonparser.getText();

    try {

        return formatter.parse(date);

    } catch (ParseException e) {

        throw new RuntimeException(e);

    }

}}

您可以像這樣在 Class 本身注冊反序列化器。


@JsonDeserialize(using = ItemDeserializer.class)

public class Item {  ...}

或者您可以像這樣手動注冊自定義反序列化器


ObjectMapper mapper = new ObjectMapper();

SimpleModule module = new SimpleModule();

module.addDeserializer(Item.class, new ItemDeserializer());

mapper.registerModule(module);


查看完整回答
反對 回復 2022-07-20
  • 2 回答
  • 0 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號