在启动springboot应用程序时出现了一些异常。我不知道我错过了什么。
这里是我的代码:这是入口:
package com.kindlepocket.web;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.kindlepocket.web.controller.KindlePocketController;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这是控制器:
package com.kindlepocket.web.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.dom4j.DocumentException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.kindlepocket.web.service.TextBookInfoSearchService;
import com.kindlepocket.web.util.CheckUtil;
import com.kindlepocket.web.util.MessageUtil;
@Component
@RequestMapping("/Weixin")
public class KindlePocketController {
private static final long serialVersionUID = 1L;
@Autowired
private TextBookInfoSearchService searchService;// = new TextBookInfoSearchService();
private static Logger logger = Logger.getLogger(KindlePocketController.class);
@RequestMapping(value = "/wx.do", method = RequestMethod.GET)
@ResponseBody
public void validate(HttpServletRequest request, HttpServletResponse response,
@RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce, @RequestParam("echostr") String echostr) {
if (logger.isInfoEnabled()) {
logger.info("\n***The message got: signature:" + signature + " timestamp:" + timestamp
+ " nonce:" + nonce + " echostr:" + echostr);
}
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
if (logger.isDebugEnabled()) {
logger.debug("response error");
}
}
if (CheckUtil.checkSignature(signature, timestamp, nonce)) {
out.print(echostr);
if (logger.isInfoEnabled()) {
logger.info("validated!");
}
}
}
@RequestMapping(value = "/wx.do", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity processMessage(HttpServletRequest request, HttpServletResponse response)
throws IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
/*
* PrintWriter out = null; try { out = response.getWriter(); } catch (IOException e) { e.printStackTrace(); }
*/
try {
Map<String, String> map = MessageUtil.xmlToMap(request);
String fromUserName = map.get("FromUserName");
String toUserName = map.get("ToUserName");
String msgType = map.get("MsgType");
String content = map.get("Content");
if (logger.isInfoEnabled()) {
logger.info("\n***The message got: fromUserName:" + fromUserName + " toUserName:"
+ toUserName + " msgType:" + msgType + " content:" + content);
}
String responseMessage = null;
if (MessageUtil.MESSAGE_TEXT.equals(msgType)) {
switch (content) {
case "1":
responseMessage = MessageUtil.initText(toUserName, fromUserName, MessageUtil.firstMenu());
break;
case "2":
responseMessage = MessageUtil
.initText(toUserName, fromUserName, MessageUtil.secondMenu());
break;
case "3":
responseMessage = MessageUtil.initPicTextMessage(toUserName, fromUserName);
break;
default:
// responseMessage = MessageUtil.initText(toUserName, fromUserName, MessageUtil.menuText());
List<String> titleList = this.searchService.search(content);
responseMessage = MessageUtil.initPicTextMessage(toUserName, fromUserName, titleList);
break;
}
/*
* TextMessage textMessage = new TextMessage(); textMessage.setFromUserName(toUserName); textMessage.setToUserName(fromUserName); textMessage.setMsgType("text"); textMessage.setCreateTime(new Date().getTime()); textMessage.setContent("the message you sent was : " + content); responseMessage = MessageUtil.textMessageToXml(textMessage); if (logger.isInfoEnabled()) { logger.info("the message responsed is :\n" + responseMessage); }
*/
} else if (MessageUtil.MESSAGE_EVENT.equals(msgType)) {
String eventType = map.get("Event");
if (MessageUtil.MESSAGE_SUBSCRIBE.equals(eventType)) {
responseMessage = MessageUtil.initText(toUserName, fromUserName,
MessageUtil.welcomeText());
}
}
if (logger.isInfoEnabled()) {
logger.info("\n***The message responsed: \n" + responseMessage);
}
// out.print(responseMessage);
return ResponseEntity.status(HttpStatus.OK).body(responseMessage);
} catch (DocumentException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
} /*
* finally { out.close(); }
*/
}
/*
* public static void main(String[] args) { SpringApplication.run(KindlePocketController.class, args); }
*/
}
package com.kindlepocket.web.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TextBookInfoSearchService {
@Autowired
private ApiService apiService;
public List<String> search(String content) {
Map<String, Object> contentMap = new HashMap<String, Object>();
contentMap.put("title", content);
try {
String result = this.apiService.doGet("http://127.0.0.1:8081/search/title", contentMap);
System.out.println("result:" + result);
} catch (Exception e) {
e.printStackTrace();
}
List<String> titles = new ArrayList<String>();
// test
titles.add("张学良口述历史");
titles.add("布谷鸟的呼唤");
return titles;
}
}
package com.kindlepocket.web.service;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.kindlepocket.web.pojo.HttpResult;
/**
* 负责和外部接口对接,发起http请求
*
*/
@Component
public class ApiService {
@Autowired
private CloseableHttpClient httpClient;
@Autowired
private RequestConfig requestConfig;
/**
* 执行DoGET请求
*
* @param url
* @return 如果响应是200,返回具体的响应内容,其他响应返回null
* @throws ClientProtocolException
* @throws IOException
*/
public String doGet(String url) throws ClientProtocolException, IOException {
// 创建http GET请求
HttpGet httpGet = new HttpGet(url);
httpGet.setConfig(this.requestConfig);
CloseableHttpResponse response = null;
try {
// 执行请求
response = httpClient.execute(httpGet);
// 判断返回状态是否为200
if (response.getStatusLine().getStatusCode() == 200) {
return EntityUtils.toString(response.getEntity(), "UTF-8");
}
} finally {
if (response != null) {
response.close();
}
}
return null;
}
/**
* 带有参数的GET请求
*
* @param url
* @param param
* @return
* @throws ClientProtocolException
* @throws IOException
* @throws URISyntaxException
*/
public String doGet(String url, Map<String, Object> param) throws ClientProtocolException, IOException,
URISyntaxException {
// 定义请求的参数
URIBuilder uriBuilder = new URIBuilder(url);
for (Map.Entry<String, Object> entry : param.entrySet()) {
uriBuilder.addParameter(entry.getKey(), entry.getValue().toString());
}
return doGet(uriBuilder.build().toString());
}
/**
* 指定POST请求
*
* @param url
* @param param 请求参数
* @return 状态码和请求的body
* @throws IOException
*/
public HttpResult doPost(String url, Map<String, Object> param) throws IOException {
// 创建http POST请求
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(this.requestConfig);
if (param != null) {
// 设置post参数
List<NameValuePair> parameters = new ArrayList<NameValuePair>(0);
for (Map.Entry<String, Object> entry : param.entrySet()) {
parameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
}
// 构造一个form表单式的实体,并且指定参数的编码为UTF-8
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters, "UTF-8");
// 将请求实体设置到httpPost对象中
httpPost.setEntity(formEntity);
}
CloseableHttpResponse response = null;
try {
// 执行请求
response = httpClient.execute(httpPost);
if (response.getEntity() != null) {
return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(
response.getEntity(), "UTF-8"));
}
return new HttpResult(response.getStatusLine().getStatusCode(), null);
} finally {
if (response != null) {
response.close();
}
}
}
/**
* 执行PUT请求
*
* @param url
* @param param 请求参数
* @return 状态码和请求的body
* @throws IOException
*/
public HttpResult doPut(String url, Map<String, Object> param) throws IOException {
// 创建http POST请求
HttpPut httpPut = new HttpPut(url);
httpPut.setConfig(this.requestConfig);
if (param != null) {
// 设置post参数
List<NameValuePair> parameters = new ArrayList<NameValuePair>(0);
for (Map.Entry<String, Object> entry : param.entrySet()) {
parameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
}
// 构造一个form表单式的实体,并且指定参数的编码为UTF-8
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters, "UTF-8");
// 将请求实体设置到httpPost对象中
httpPut.setEntity(formEntity);
}
CloseableHttpResponse response = null;
try {
// 执行请求
response = httpClient.execute(httpPut);
if (response.getEntity() != null) {
return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(
response.getEntity(), "UTF-8"));
}
return new HttpResult(response.getStatusLine().getStatusCode(), null);
} finally {
if (response != null) {
response.close();
}
}
}
/**
* 指定POST请求
*
* @param url
* @param param 请求参数
* @return 状态码和请求的body
* @throws IOException
*/
public HttpResult doPostJson(String url, String json) throws IOException {
// 创建http POST请求
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(this.requestConfig);
if (json != null) {
// 构造一个字符串的实体
StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON);
// 将请求实体设置到httpPost对象中
httpPost.setEntity(stringEntity);
}
CloseableHttpResponse response = null;
try {
// 执行请求
response = httpClient.execute(httpPost);
if (response.getEntity() != null) {
return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(
response.getEntity(), "UTF-8"));
}
return new HttpResult(response.getStatusLine().getStatusCode(), null);
} finally {
if (response != null) {
response.close();
}
}
}
/**
* 没有参数的post请求
*
* @param url
* @return
* @throws IOException
*/
public HttpResult doPost(String url) throws IOException {
return doPost(url, null);
}
/**
* 执行PUT请求
*
* @param url
* @return 状态码和请求的body
* @throws IOException
*/
public HttpResult doPut(String url) throws IOException {
return this.doPut(url, null);
}
/**
* 执行DELETE请求,通过POST提交,_method指定真正的请求方法
*
* @param url
* @param param 请求参数
* @return 状态码和请求的body
* @throws IOException
*/
public HttpResult doDelete(String url, Map<String, Object> param) throws IOException {
param.put("_method", "DELETE");
return this.doPost(url, param);
}
/**
* 执行DELETE请求(真正的DELETE请求)
*
* @param url
* @return 状态码和请求的body
* @throws IOException
*/
public HttpResult doDelete(String url) throws IOException {
// 创建http DELETE请求
HttpDelete httpDelete = new HttpDelete(url);
httpDelete.setConfig(this.requestConfig);
CloseableHttpResponse response = null;
try {
// 执行请求
response = httpClient.execute(httpDelete);
if (response.getEntity() != null) {
return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(
response.getEntity(), "UTF-8"));
}
return new HttpResult(response.getStatusLine().getStatusCode(), null);
} finally {
if (response != null) {
response.close();
}
}
}
}
这是pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kindlepocket.web</groupId>
<artifactId>kindlepocket-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>xpp3</groupId>
<artifactId>xpp3</artifactId>
<version>1.1.4c</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
这是日志(对格式抱歉):
问题已经修复,我更新了ContextConfig.class,如下所示:`
package com.kindlepocket.web;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ContextConfig {
@Bean
public CloseableHttpClient httpClient() {
return HttpClientBuilder.create().build();
}
@Bean
public RequestConfig requestConfig() {
return RequestConfig.custom().build();
}
}
`
您缺少一个CloseBleHttpClient
类型的bean。在spring上下文配置中创建CloseableHttpClient
类型的bean。
更新:
您可以在组件扫描包中创建一个configuration
类,并创建一个CloseableHttpClient
类型的bean。
package com.kindlepocket.web;
@Configuration
public class ContextConfig {
@Bean
public CloseableHttpClient closeableHttpClient() {
return new CloseableHttpClient(); // Return an instance
}
}
我做了一些搜索,但我无法找出是什么问题。我知道这个问题来自于ClassNotFoundException,但我无法解决它。 我把我需要的东西都装上了(嗯,我想)。下面是我的代码: DAO类: 服务类别:
BeanCreationException:创建名为“Vote Controller”的bean时出错:autowired依赖项的注入失败;嵌套的异常是org.springframework.beans.factory.beanCreationException:不能autowire字段:com.mindtree.service.voteservice com.mindtree.controlle
ContactController.java
我有一个集成了spring框架的maven项目,我使用这个项目为移动应用程序构建web服务。当我在AWS ubuntu服务器上部署该项目时,该项目给出了BeanCreationException并且它在Tomcat7上运行失败。当我在本地环境中运行它时,它工作得很好。下面是Tomcat7的错误日志。 TIA
所以我正在尝试学习spring,我已经读了很多教程,并且尝试从闪存驱动器中的一个项目中复制一些代码。 我已经设置了tomcat,它的工作发现,但我仍然有一些问题在这里。问题是,我通常可以毫无问题地从浏览器访问控制器的操作,但当我开始添加注释和ContextLoaderListener时,它一直给我404的状态。我不知道我做了什么,但通过调整一些事情,我的浏览器至少尝试再次到达控制器。但会抛出一个巨