Как устранить ошибку: org.springframework.web.client.HttpClientErrorException: 400 null? - PullRequest
0 голосов
/ 18 апреля 2020

Я разработал службу отдыха, которая управляет операциями с клиентами, которые касаются клиентов.

Теперь я хотел бы вызвать свою службу отдыха из моего весеннего приложения mvc, но я получаю следующую ошибку, когда нажимаю на кнопка «обновить», которая находится на моей странице jsp:

org.springframework.web.util.NestedServletException: обработка запроса не удалась; вложенное исключение - org.springframework.web.client.HttpClientErrorException: 400 null org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet. java: 982) org.springframework.weer.let.let.Set.Set 1034 *: 866) javax.servlet.http.HttpServlet.service (HttpServlet. java: 634) org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet. java: 851) javax.servlet.http. .service (HttpServlet. java: 741) org. apache .tomcat.websocket.server.WsFilter.doFilter (WsFilter. java: 53) вызывает mère

org.springframework.web.client .HttpClientErrorException: 400 пусто .client.ResponseErrorHandler.handleError (ResponseErrorHandler. java: 63) org.springframework.web.client.RestTemplate.ha ndleResponse (RestTemplate. java: 766) org.springframework.web.client.RestTemplate.doExecute (RestTemplate. java: 724) org.springframework.web.client.RestTemplate.execute (6) Restresemp. 10) .45 org.springframework.web.client.RestTemplate.getForObject (RestTemplate. java: 332) com.luv2code.springdemo.service.CustomerServiceRestClientImpl.getCustomer (CustomerServiceRestClientImpl. showFormForUpdate (CustomerController. java: 62) sun.reflect.NativeMethodAccessorImpl.invoke0 (родной метод) sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl. * 10b для получения легкого доступа). : 43) java .lang.reflect.Method.invoke (Метод. java: 498) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke (InvocableHandlerMethod. java: 209) org.sprf .method.support.InvocableHandlerMethod.invokeForRequest (InvocableHandlerMethod. java: 136) org.sp ringframework.web.servlet. mvc .method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod. java: 102) org.springframework.web.servlet. *: 877) org.springframework.web.servlet. mvc .method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter. java: 783) org.springframework.web.servlet. mvc. AbstractHandlerMethodAdapter. java: 87) org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet. java: 991) org.springframework.web.servlet.DispatcherServlet.doSerg. 9Serg. springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet. java: 974) org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet. java: 866) javax.servlet.httphlet. java: 634) org.springframework.web.servl et.FrameworkServlet.service (FrameworkServlet. java: 851) javax.servlet.http.HttpServlet.service (HttpServlet. java: 741) org. apache .tomcat.websocket.server.WsFilter.sFilter (WilFilter. java: 53)

это мой класс DemoAppConfig:

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/"); 
    }   
}

, а это мой файл application.properties:

#
# The URL for the CRM REST API
# - update to match your local environment
#
crm.rest.url=http://localhost:8080/spring-crm-rest/api/customers

и этот мой класс обслуживания:

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<Customer> getCustomers() {

        logger.info("in getCustomers(): Calling REST API " + crmRestUrl);

        // make REST call
        ResponseEntity<List<Customer>> responseEntity = 
                                            restTemplate.exchange(crmRestUrl, HttpMethod.GET, null, 
                                                                  new ParameterizedTypeReference<List<Customer>>() {});

        // get the list of customers from response
        List<Customer> 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);
    }

}

, и это мой контроллер, который находится в моей службе отдыха:

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<Customer> 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é";
    }

}

Вот ссылка на диск для тех, кто хочет проверить мое приложение:

https://drive.google.com/open?id=1Hko4iSjpR1qV7s1kfWVdLbotWzn1Cvx1

Может кто-нибудь помочь мне, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...