java - 无法从 spring-web 创建 RestTemplate() 实例

标签 java spring

我正在使用 tomcat Web 应用程序和 Rest Webservice 当我插入数据时出现异常!

我的类 CustomerProxy:

package com.rayanen.java.se.cmsd.proxy;

import com.rayanen.java.se.cmsd.dto.CustomerDTO;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import javax.faces.context.FacesContext;

@Component
public class CustomerProxy implements ICustomerProxy{



    @Override
    public void insertCustomer(CustomerDTO customerDTO) {
        RestTemplate restTemplate = new RestTemplate();

        HttpHeaders requestHeaders = new HttpHeaders();

        String headerValue = FacesContext.getCurrentInstance().getExternalContext().getRequestHeaderMap().get("cookie");
        requestHeaders.add("Cookie", headerValue);

        HttpEntity requestEntity = new HttpEntity(customerDTO, requestHeaders);
        ResponseEntity response = restTemplate.exchange(
                "http://localhost:8080/ws/customer/insert",
                HttpMethod.POST,
                requestEntity,
                CustomerDTO.class);
        /*return response.getBody();*/
    }
}

类 CustomerRestController :

package com.rayanen.java.se.cmsd.ws;

import com.rayanen.java.se.cmsd.dto.CustomerDTO;
import com.rayanen.java.se.cmsd.exceptions.*;
import com.rayanen.java.se.cmsd.facade.facadeimpl.CustomerFacade;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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;

@RestController
@RequestMapping(value = "/customer")
public class CustomerRestController {
    @Autowired
    private CustomerFacade customerFacade;

    @RequestMapping(method = RequestMethod.POST, value = "/insert")
    ResponseEntity insert(@RequestBody CustomerDTO customerDTO){
        try {
            customerFacade.save(customerDTO);
        } catch (StoreFailedException e) {
            e.printStackTrace();
        } catch (CustomerIDDuplicateException e) {
            e.printStackTrace();
        } catch (EmailNotValidException e) {
            e.printStackTrace();
        } catch (CustomerIDNotValidExeption customerIDNotValidExeption) {
            customerIDNotValidExeption.printStackTrace();
        } catch (LastNameNotValidException e) {
            e.printStackTrace();
        } catch (NameNotValidException e) {
            e.printStackTrace();
        }
        return new ResponseEntity(HttpStatus.OK);
    }

}

CustomerBean 类:

package com.rayanen.java.se.cmsd.webui;

import com.rayanen.java.se.cmsd.dto.CustomerDTO;
import com.rayanen.java.se.cmsd.exceptions.*;
import com.rayanen.java.se.cmsd.facade.facadeimpl.CustomerFacade;
import com.rayanen.java.se.cmsd.proxy.ICustomerProxy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import java.io.Serializable;

@Component
@Scope("view")
public class CustomerBean implements Serializable{


    private CustomerDTO customerDTO = new CustomerDTO();
    private String lable;

    @Autowired
    private CustomerFacade customerFacade;

    @Autowired
    private ICustomerProxy iCustomerProxy;

    public String getLable() {
        return lable;
    }

    public void setLable(String lable) {
        this.lable = lable;
    }

    public CustomerDTO getCustomerDTO() {
        return customerDTO;
    }

    public void setCustomerDTO(CustomerDTO customerDTO) {
        this.customerDTO = customerDTO;
    }

    public void insert(ActionEvent actionEvent){
        lable = customerDTO.getName() + "; " + customerDTO.getLastName();
        iCustomerProxy.insertCustomer(customerDTO);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Added Successfully", ""));

    }



}

插入数据后的异常,我调试并找出异常是这样的:

RestTemplate restTemplate = new RestTemplate();

20-Nov-2017 23:06:04.211 WARNING [http-nio-8080-exec-5] com.sun.faces.lifecycle.InvokeApplicationPhase.execute /customer/insert.xhtml @43,134 actionListener="#{customerBean.insert}": java.lang.NoClassDefFoundError: org/springframework/core/KotlinDetector javax.el.ELException: /customer/insert.xhtml @43,134 actionListener="#{customerBean.insert}": java.lang.NoClassDefFoundError: org/springframework/core/KotlinDetector at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111) at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147) at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813) at javax.faces.component.UICommand.broadcast(UICommand.java:300) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.rayanen.java.se.cmsd.webui.LoginFilter.doFilter(LoginFilter.java:30) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NoClassDefFoundError: org/springframework/core/KotlinDetector at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.registerWellKnownModulesIfAvailable(Jackson2ObjectMapperBuilder.java:766) at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.configure(Jackson2ObjectMapperBuilder.java:619) at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.build(Jackson2ObjectMapperBuilder.java:602) at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.(MappingJackson2HttpMessageConverter.java:59) at org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter.(AllEncompassingFormHttpMessageConverter.java:67) at org.springframework.web.client.RestTemplate.(RestTemplate.java:171) at com.rayanen.java.se.cmsd.proxy.CustomerProxy.insertCustomer(CustomerProxy.java:22) at com.rayanen.java.se.cmsd.webui.CustomerBean.insert(CustomerBean.java:48) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.el.parser.AstValue.invoke(AstValue.java:247) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) ... 34 more Caused by: java.lang.ClassNotFoundException: org.springframework.core.KotlinDetector at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167) ... 49 more

如有任何帮助,我们将不胜感激。

最佳答案

是的,正如@Kayaman在评论中指出的那样,添加 spring core 依赖应该可以解决这个问题。

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>

关于java - 无法从 spring-web 创建 RestTemplate() 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47399942/

相关文章:

java - 我自己的图形类中使用 HashMap 的 NPE

java - Java中的延续错误

java - Spring MVC - 实例化 servlet 类时出错

java - spring webflow 中的重定向错误消息

java - 仅将异常处理绑定(bind)到 @ControllerAdvice 类

java - JUnit5:指定多个@Nested 类的执行顺序

java - Slick2d Image 对象无法正确显示?

java - 用于删除分层相关数据的 Hazelcast Listener?

java spring ws : webServiceTemplate. marshalSendAndReceive 在发送之前签署文档

java - 排除 Spring MVC Controller 的请求映射中的某些路径