title: how to resolve the error : HttpClientErrorException: 400 null?
body: <p>I developed a rest service which manages the crud operations which concern customers.</p>
  
  <p>Now I would like to call my service rest from my spring mvc application, but I get the following error when I click on the "update" button which is in my jsp page:</p>
  
  <pre><code>org.springframework.web.util.NestedServletException: Request processing failed; nested exception is
    org.springframework.web.client.HttpClientErrorException: 400 null
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) cause mère
      org.springframework.web.client.HttpClientErrorException: 400 null
      org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94)
      org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:79)
      org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
      org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:766)
      org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:724)
      org.springframework.web.client.RestTemplate.execute(RestTemplate.java:680)
      org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:332)
      com.luv2code.springdemo.service.CustomerServiceRestClientImpl.getCustomer(CustomerServiceRestClientImpl.java:59)
      com.luv2code.springdemo.controller.CustomerController.showFormForUpdate(CustomerController.java:62)
      sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      java.lang.reflect.Method.invoke(Method.java:498)
      org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
      org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
      org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
      org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
      org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
      org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
      org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
      org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
      org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
      org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
      org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
      org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
  </code></pre>
  
  <p>this is my DemoAppConfig class :</p>
  
  <pre><code>package com.luv2code.springdemo.config;
  
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.ComponentScan;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.context.annotation.PropertySource;
  import org.springframework.web.client.RestTemplate;
  import org.springframework.web.servlet.ViewResolver;
  import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  import org.springframework.web.servlet.view.InternalResourceViewResolver;
  
  @Configuration
  @EnableWebMvc
  @ComponentScan("com.luv2code.springdemo")
  @PropertySource({ "classpath:application.properties" })
  public class DemoAppConfig implements WebMvcConfigurer {
  
      // define a bean for ViewResolver
  
      @Bean
      public ViewResolver viewResolver() {
  
          InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  
          viewResolver.setPrefix("/WEB-INF/view/");
          viewResolver.setSuffix(".jsp");
  
          return viewResolver;
      }
  
      // define bean for RestTemplate ... this is used to make client REST calls
  
      @Bean
      public RestTemplate restTemplate() {
          return new RestTemplate();
      }
  
      // add resource handler for loading css, images, etc
  
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
          registry
            .addResourceHandler("/resources/**")
            .addResourceLocations("/resources/"); 
      }   
  }
  </code></pre>
  
  <p>and this is my file application.properties :</p>
  
  <pre><code>#
  # The URL for the CRM REST API
  # - update to match your local environment
  #
  crm.rest.url=http://localhost:8080/spring-crm-rest/api/customers
  </code></pre>
  
  <p>and this is my service class :</p>
  
  <pre><code>package com.luv2code.springdemo.service;
  
  import java.util.List;
  import java.util.logging.Logger;
  
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.beans.factory.annotation.Value;
  import org.springframework.core.ParameterizedTypeReference;
  import org.springframework.http.HttpMethod;
  import org.springframework.http.ResponseEntity;
  import org.springframework.stereotype.Service;
  import org.springframework.web.client.RestTemplate;
  
  import com.luv2code.springdemo.model.Customer;
  
  @Service
  public class CustomerServiceRestClientImpl implements CustomerService {
  
      private RestTemplate restTemplate;
  
      private String crmRestUrl;
  
      private Logger logger = Logger.getLogger(getClass().getName());
  
      @Autowired
      public CustomerServiceRestClientImpl(RestTemplate theRestTemplate, 
                                          @Value("${crm.rest.url}") String theUrl) {
          restTemplate = theRestTemplate;
          crmRestUrl = theUrl;
  
          logger.info("Loaded property:  crm.rest.url=" + crmRestUrl);
      }
  
      @Override
      public List&lt;Customer&gt; getCustomers() {
  
          logger.info("in getCustomers(): Calling REST API " + crmRestUrl);
  
          // make REST call
          ResponseEntity&lt;List&lt;Customer&gt;&gt; responseEntity = 
                                              restTemplate.exchange(crmRestUrl, HttpMethod.GET, null, 
                                                                    new ParameterizedTypeReference&lt;List&lt;Customer&gt;&gt;() {});
  
          // get the list of customers from response
          List&lt;Customer&gt; customers = responseEntity.getBody();
  
          logger.info("in getCustomers(): customers" + customers);
  
          return customers;
      }
  
      @Override
      public Customer getCustomer(int theId) {
  
          logger.info("in getCustomer(): Calling REST API " + crmRestUrl);
  
          // make REST call
          Customer theCustomer = 
                  restTemplate.getForObject(crmRestUrl + "/" + theId, 
                                            Customer.class);
  
          logger.info("in saveCustomer(): theCustomer=" + theCustomer);
  
          return theCustomer;
      }
  
      @Override
      public void saveCustomer(Customer theCustomer) {
  
          logger.info("in saveCustomer(): Calling REST API " + crmRestUrl);
  
          int employeeId = theCustomer.getId();
  
          // make REST call
          if (employeeId == 0) {
              // add employee
              restTemplate.postForEntity(crmRestUrl, theCustomer, String.class);          
  
          } else {
              // update employee
              restTemplate.put(crmRestUrl, theCustomer);
          }
  
          logger.info("in saveCustomer(): success");  
      }
  
      @Override
      public void deleteCustomer(int theId) {
  
          logger.info("in deleteCustomer(): Calling REST API " + crmRestUrl);
  
          // make REST call
          restTemplate.delete(crmRestUrl + "/" + theId);
  
          logger.info("in deleteCustomer(): deleted customer theId=" + theId);
      }
  
  }
  </code></pre>
  
  <p>and this is my controller which is in my rest service :</p>
  
  <pre><code>package com.luv2code.springdemo.rest;
  
  import java.util.List;
  
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.web.bind.annotation.DeleteMapping;
  import org.springframework.web.bind.annotation.GetMapping;
  import org.springframework.web.bind.annotation.PathVariable;
  import org.springframework.web.bind.annotation.PostMapping;
  import org.springframework.web.bind.annotation.PutMapping;
  import org.springframework.web.bind.annotation.RequestBody;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RestController;
  
  import com.luv2code.springdemo.entity.Customer;
  import com.luv2code.springdemo.service.CustomerService;
  
  @RestController
  @RequestMapping("/api")
  public class CustomerRestController {
  
  
      // importer la depende du service
  
      @Autowired
      private CustomerService customerService;
  
      // ajout de la methode qui permet de récupérer les customers (clients)
  
      @GetMapping("/customers")
      public List&lt;Customer&gt; getCustomers(){
  
  
          return customerService.getCustomers();
      }
  
  
      // récupérer un seul customer avec un id donné en parametre
  
      @GetMapping("/customer/{customerId}")
      public Customer getCustomer(@PathVariable int customerId) {
  
          Customer theCustomer = customerService.getCustomer(customerId);
  
          if(theCustomer == null) {
              throw new CustomerNotFoundException("Le client avec l'id :"+ customerId + " n'est pas trouvé");
          }
  
  
          return theCustomer;
      }
  
      // ajouter la méthode d'ajout d'un nouveau customer
  
      @PostMapping("/customers")
      public Customer addCustomer(@RequestBody  Customer theCustomer) {
  
          theCustomer.setId(0);
  
          customerService.saveCustomer(theCustomer);
  
          return theCustomer;
      }
  
  
      // modification d'un customer existent :
  
      @PutMapping("/customers")
      public Customer updateCustomer(@RequestBody  Customer theCustomer) {
  
  
  
          customerService.saveCustomer(theCustomer);
  
          return theCustomer;
      }
  
      // delete un customer en fonction de l'id donné :
  
      @DeleteMapping("/customers/{customerId}")
      public String DeleteCustomer(@PathVariable int customerId) {
  
          Customer theCustomer = customerService.getCustomer(customerId);
  
          if(theCustomer == null) {
              throw new CustomerNotFoundException("le customer avec l'id donnée n'a pas été trouvé");
          }
  
          customerService.deleteCustomer(customerId);;
  
          return "le client avec l'id" + customerId + " a été supprimé";
      }
  
  }
  </code></pre>
  
  <p>here is the drive link for those who want to test my application :</p>
  
  <p><a href="https://drive.google.com/open?id=1Hko4iSjpR1qV7s1kfWVdLbotWzn1Cvx1" rel="nofollow noreferrer">https://drive.google.com/open?id=1Hko4iSjpR1qV7s1kfWVdLbotWzn1Cvx1</a></p>
  
  <p>can someone help me please ?</p>