1

In my angular application, I am trying to make the http post request to the spring restful API.. but I could not succeed.. I am not getting any error response in the browser console..

My angular code is,

addToCart(productId: number, quantity: number) {
    const headers = new HttpHeaders().set('Content-Type', 'text/plain; charset=utf-8');
    console.log("--------order.service.ts----------addToCart()-------productId:"+productId+":------quantity:"+quantity);
     this.http.post('http://localhost:8080/order/addtocart', 
              '{ "dealerId": 9, "createdBy": "-1", "productId": productId, "quantity": quantity}', 
              {headers: headers})
              .pipe(catchError(this.errorHandlerService.handleError));
    }

Spring restful API:

package com.wocs.rest.controller;

import java.io.IOException;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wocs.services.common.ServiceException;
import com.wocs.services.order.iface.OrderServiceIface;
import com.wocs.services.userrole.model.User;

@RestController()
@RequestMapping("/order")
public class OrderController {

    static Logger logger = Logger.getLogger(OrderController.class);

    @Autowired
    private OrderServiceIface orderService;

    public void setOrderService(OrderServiceIface orderService) {
        this.orderService = orderService;
    }

    @RequestMapping(value = "/addtocart", method = RequestMethod.POST, consumes = "text/plain")
    public void addToCart(@RequestBody String stringRequestBody) throws JsonParseException, JsonMappingException, IOException, ServiceException
    {
        logger.info("addtocart:"+stringRequestBody);
        Map<String, Object> jsonMap = new ObjectMapper().readValue(stringRequestBody,
            new TypeReference<Map<String,Object>>(){});

         orderService.addToCart((Integer)jsonMap.get("dealerId"), (String) jsonMap.get("createdBy"), (Integer)jsonMap.get("productId"), (Integer)jsonMap.get("quantity"));
    }

}

Browser console:

enter image description here

Any help would be appreciated.. Thanks in advance..

1
  • Are you actually subscribing to the Observable? This request will only be made, if the Observable is subscribed to. Commented Jun 11, 2018 at 8:36

2 Answers 2

1

You missed the subscription. If you have declared addToCart in service and want to handle API response in component modify code as:

service

addToCart(productId: number, quantity: number) {
    let data = { 
        "dealerId": 9, 
        "createdBy": "-1", 
        "productId": productId, 
        "quantity": quantity
    }
    const headers = new HttpHeaders().set('Content-Type', 'text/plain; charset=utf-8');
    console.log("--------order.service.ts----------addToCart()-------productId:"+productId+":------quantity:"+quantity);
    return this.http.post('http://localhost:8080/order/addtocart', 
              JSON.stringify(data), 
              {headers: headers})
              .pipe(catchError(this.errorHandlerService.handleError));
}

component subscribe service method

this.service.addToCart(2, 4).subscribe(res => {
    console.log(res); // Response from API
})
Sign up to request clarification or add additional context in comments.

Comments

1

You are not subscribing to the this.http.post(...) function, which returns an observable.

An observable does nothing until you subscribe to it, so you code should be:

addToCart(productId: number, quantity: number) {
    const headers = new HttpHeaders().set('Content-Type', 'text/plain; charset=utf-8');

    this.http.post('http://localhost:8080/order/addtocart', 
          '{ "dealerId": 9, "createdBy": "-1", "productId": productId, "quantity": quantity}', 
          {headers: headers})
          .pipe(catchError(this.errorHandlerService.handleError))
          .subscribe(data => {
              // Handle the updated data here.
              console.log(data);
          });
}         

Alternatively you can use an async pipe to handle the subscription for you, if you get any data back which can be used in a view directly.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.