'Request Body Missing in Spring while updating using PATCH API in react js

Spring shows - Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.cg.bookstore.entities.OrderDetails com.cg.bookstore.controller.OrderDetailsController.updateDeliveryStatus(int,java.lang.String)]

Console shows - Uncaught (in promise) Error: Request failed with status code 400

class UpdateOrder extends Component {

state = {
        deliveryStatus:""
 }

handleChange = (event) => {
    const deliveryStatus = { ...this.state.deliveryStatus };
    this.setState({ deliveryStatus: event.target.value });
  };

  handleSubmit = (event) => {
    // Prevents default behaviour of submit button
    event.preventDefault();
    console.log(this.state.deliveryStatus)
    console.log()
  
    OrderService.updateDeliveryStatus(this.props.match.params.orderDetailsId,this.state.deliveryStatus)
    .then((res) => {
      this.props.history.push("/admin/orders");
    });
  };

In OrderService I call the updateDeliveryStatus

async updateDeliveryStatus(orderId,deliveryStatus){
    return await axios.patch(BASE_URL+"/"+orderId,deliveryStatus)
    
}

The updateDeliveryStatus service in spring

@Override
public OrderDetails updateDeliveryStatus(int orderId, String deliveryStatus)
{
    Optional<OrderDetails> opt = orderDetailsRepo.findById(orderId);
    OrderDetails od;
    if (opt.isPresent())
    {
        od = opt.get();
        od.setDeliveryStatus(deliveryStatus);
        orderDetailsRepo.save(od);
    } else
    {
    
        throw new OrderDetailsNotFoundException("Order is not found");
    }
    return od;
}

While I was testing backend in POSTMAN , I pass the input as plain string and it works fine. Is it because the input in not in form of json the issue? How to fix this ?



Solution 1:[1]

Usually, when using @PutMethod and wanting to update a resource you need to provide both ID of the resource you want to update and the new body, which in this case I presume is 'OrderDetails', error suggests is missing there.
Without java controller code it's only assumptions though.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Yunnosch