Невозможно передать объект Date в бэкэнд из React в Spring Boot - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблемы с тем, чтобы мой бэкэнд принимал значение, которое передается из значения, которое возвращается из компонента выбора даты, который я использую для своего внешнего интерфейса. Я использую Календарь из библиотеки реагирующих календарей. Я сделал console.log (), чтобы увидеть, в каком формате хранится дата, и использовал Postman, чтобы выполнить запрос POST с этой датой. Я пытаюсь добавить объект, который выглядит следующим образом:

{
        "id": 2,
        "customer": "Wal Mart",
        "destination": "Chicago,IL",
        "driver": "Jeff",
        "deliveryDate": "Thu Apr 23 2020 01:57:47 GMT-0500 (Central Daylight Time)"
    }

и получаемый ответ гласит: "JSON Ошибка разбора: Невозможно десериализовать значение типа java.util.Date из строки \" Чт 23 апреля 2020 01:57:47 GMT-0500 (Центральное летнее время) \ ". Так выглядит компонент формы в моем файле React

class Add extends Component {

    constructor(props){
        super(props)
        this.state = {   
        id: '',
        customer: '',
        destination: '',
        driver: '',
        deliveryDate: new Date()
        } 
        this.handleChange = this.handleChange.bind(this);
    }


    handleChange(event){
        this.setState({[event.target.name]: event.target.value})
        console.log(this.state)
    }

    onChange = deliveryDate => 
    this.setState({ deliveryDate })


    submitHandler = e => {
        axios.post('http://localhost:8080/add', this.state)
    }

    render() {
        const { customer, destination, driver, deliveryDate} = this.state
        return (
        <div className="add-form">
            <Form onSubmit={this.submitHandler}>
                <Form.Group >
                    <Form.Label>Customer</Form.Label>
                    <Form.Control type="text" name="customer" value = {customer} onChange= {this.handleChange} />
                    <Form.Label>Destination</Form.Label>
                    <Form.Control type="text"  name="destination" value= {destination}  onChange={this.handleChange} />
                    <Form.Label>Driver</Form.Label>
                    <Form.Control type="text"  name="driver" value= {driver} onChange={this.handleChange} />
                    <Form.Label>Delivery Date</Form.Label>
                    <Calendar   name="date" value= {deliveryDate} onChange={this.onChange}/>
                </Form.Group>
                <Button variant="success" type="submit" className="add-button1" href={"/"}>Add Load</Button>
            </Form>
        </div>
        );
    }
}

Могу ли я что-нибудь сделать для форматирования даты, чтобы мои почтовые запросы действительно проходят? Спасибо

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете попробовать отправить дату и время как время эпохи, а затем преобразовать его в объект даты в бэкэнде ..

Внешний интерфейс как

submitHandler = e => {
    const { deliveryDate } = this.state;
    axios.post('http://localhost:8080/add', { ...this.state, deliveryDate: deliveryDate ? deliveryDate.getTime() : null  })
}

А ваш бэкэнд как ..

    Long deliveryDate = abc.getDeliveryDate();
    Date deliveryDateObj = new Date(deliveryDate);
...