मेरे SpringBootApplication में @DateTimeFormat के साथ काम करते समय मुझे समस्या हो रही है। नीचे कोड स्निपेट है जहां मुझे समस्या मिल रही है`

package com.example.demo;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

@RestController
public class DateTimeController {

    @GetMapping("/test/datetime/{id}")
    public String testDateParsing(@PathVariable String id,
                                  @RequestParam("since") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssz") LocalDateTime since) {

        System.out.println("id : " + id);
        System.out.println("since : " + since);

        return "success";
    }
}

कोड ईएसटी समय क्षेत्र के डेटाटाइम के साथ ठीक काम कर रहा है -

http://localhost:8080/test/datetime/1?since=2021-03-02T10:57:43-05:00 
- I am getting SUCCESS response for 2021-03-02T10:57:43-05:00 (EST Time)

IST समय क्षेत्र के डेटाटाइम के साथ कोड Not Working है -

http://localhost:8080/test/datetime/1?since=2021-03-02T10:57:43+05:30 
- I am getting ERROR response for 2021-03-02T10:57:43+05:30 (IST Time)

अपवाद - "Java.lang.String' प्रकार के मान को में बदलने में विफल आवश्यक प्रकार 'java.time.LocalDateTime'; नेस्टेड अपवाद है org.springframework.core.convert.ConversionFailedException: करने में विफल प्रकार [java.lang.String] से टाइप करने के लिए कनवर्ट करें [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime] मान '2021-03-02T10:57:43 05:30' के लिए; नेस्ट अपवाद है java.lang.IllegalArgumentException: पार्स प्रयास विफल रहा मूल्य के लिए [2021-03-02T10:57:43 05:30]"

कोई विचार है कि इस समस्या को कैसे ठीक किया जाए?

0
Subhadip Gupta 23 मार्च 2021, 09:48

2 जवाब

सबसे बढ़िया उत्तर

समस्या आपके अनुरोध URL में + चिह्न है। यह एक आरक्षित संकेत है।

आपको क्वेरी पैरामीटर को URL एन्कोड करना होगा। और यह तब इस तरह दिखेगा:

GET http://localhost:8080/test/datetime/1?since=2021-03-02T10:57:43%2B05:30
3
Simon Martinelli 23 मार्च 2021, 10:09

आपके URL में धन चिह्न ("+") स्वचालित रूप से एक स्पेस कैरेक्टर (" ") में परिवर्तित हो रहा है। इसे URL एन्कोडिंग द्वारा "%2B" के रूप में तय किया जा सकता है।

http://localhost:8080/test/datetime/1?since=2021-03-02T10:57:43%2B05:30

इस समस्या की पुष्टि अपवाद संदेश को बारीकी से पढ़कर की जा सकती है, जो पार्स किए गए पाठ को इसमें एक स्थान के रूप में दिखा रहा है, न कि धन चिह्न के रूप में:

Parse attempt failed for value [2021-03-02T10:57:43 05:30]"

किसी स्थान पर धन चिह्न का यह रूपांतरण URL में काफी सामान्य रूपांतरण है, और ऐसा प्रतीत होता है कि स्प्रिंग डिफ़ॉल्ट रूप से ऐसा कर रहा है।

1
M. Justin 23 मार्च 2021, 10:29