Что касается Spring Boot 1.1.0.RC1, добавлена автоконфигурация и стартовый pom Spring Social, что означает, что мне не нужно будет добавлять сотню зависимостей к моему pom, и многие бессмысленные конфигурации Spring будут обрабатываться для меня. Давайте посмотрим, как это работает на примере.
Я буду реализовывать веб-приложение из двух страниц. Один покажет временную шкалу данного пользователя в Twitter, а другой — информацию о профиле пользователя. Вот мой пом
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" 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>nr.co.caught</groupid> <artifactid>BootTwitterJoy</artifactid> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <!-- Inherit defaults from Spring Boot --> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>1.1.0.RC1</version> </parent> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-social-twitter</artifactid> </dependency> <!-- Both are needed for jsp support--> <dependency> <groupid>org.apache.tomcat.embed</groupid> <artifactid>tomcat-embed-jasper</artifactid> </dependency> <dependency> <groupid>javax.servlet</groupid> <artifactid>jstl</artifactid> </dependency> </dependencies> <!-- Needed for fat jar --> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> <!-- Add Spring repositories --> <!-- (you don't need this if you are using a .RELEASE version) --> <repositories> <repository> <id>spring-snapshots</id> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> </repository> </repositories> <pluginrepositories> <pluginrepository> <id>spring-snapshots</id> </pluginrepository> <pluginrepository> <id>spring-milestones</id> </pluginrepository> </pluginrepositories></project> |
Как вы можете видеть, у меня есть зависимость для начинающих социальных сетей и Twitter, которая предоставляет мне возможности Spring Social и Web. Я добавлю jasper и jstl для моих страниц jsp для работы. Моя часть репозиториев довольно многолюдна из-за веховых репозиториев.
Теперь мы добавим наш Сервис для вызовов методов Твиттера и Контроллер для обработки запросов. Наш контроллер прост и понятен:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
@Controllerpublic class TwitterController { @Autowired private TwitterService twitterService; @RequestMapping(value = "/timeline/{twitterUser}") public String getUserTimeline(@PathVariable String twitterUser, Model model) { model.addAttribute("tweets", twitterService.getUserTimeline(twitterUser)); model.addAttribute("user", twitterUser); return "timeline"; } @RequestMapping(value = "/profile/{twitterUser}") public String getUserProfile(@PathVariable String twitterUser, Model model) { model.addAttribute("userProfile", twitterService.getUserProfile(twitterUser)); return "profile"; }} |
Если запрос приходит с «/ timeline / username», наш контроллер получит временную шкалу пользователя, а если он будет с «/ profile / username», он получит профиль пользователя от TwitterService. Вот наш сервис Twitter:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
@Servicepublic class TwitterService { @Autowired private Twitter twitter; public List < Tweet > getUserTimeline(String twitterUser) { TimelineOperations timelineOps = twitter.timelineOperations(); List tweets = timelineOps.getUserTimeline("@" + twitterUser); return tweets; } public TwitterProfile getUserProfile(String twitterUser) { UserOperations userOperations = twitter.userOperations(); TwitterProfile userProfile = userOperations.getUserProfile(twitterUser); return userProfile; }} |
У нас есть объект Twitter, который будет создан благодаря автоконфигурации Spring Boot. Мы просто должны предоставить идентификатор приложения и секретный ключ приложения (также называемый ключом пользователя и секретом пользователя) в свойствах нашего приложения, и Boot сделает все остальное. Я цитирую объяснение объекта Twitter из Spring Javadoc:
«Этот экземпляр TwitterTemplate ограничен только выполнением операций, требующих авторизации клиента. Например, вы можете использовать его для поиска в Twitter, но вы не можете использовать его для публикации обновления статуса. Указанные здесь учетные данные клиента используются для получения токена доступа клиента через OAuth 2 Client Credentials Grant ».
Если вы попытаетесь обновить состояние, вы получите «org.springframework.social.MissingAuthorizationException: для операции требуется авторизация, но привязка API была создана без авторизации». Для дальнейшей функциональности Twitter нам потребуется предоставить токен доступа и секретные ключи доступа, но, насколько я знаю, автоконфигурация еще не справилась бы с этими случаями.
Мои JSP:
profile.jsp:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title></title></head><body><img src="${userProfile.profileImageUrl}"/> Screen name: ${userProfile.screenName} Name: ${userProfile.name} Description: ${userProfile.description} Location: ${userProfile.location} Followers: ${userProfile.followersCount} </body></html> |
Как видите, профиль берет userProfile, предоставленный нашим контроллером, и показывает основные свойства профиля. timeline.jsp
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Time Line for <c:out value="${twitterUser}" /> TimeLine</title></head><body><ul> <c:forEach items="${tweets}" var="tweet"> <li>${tweet.text} at <c:out value="${tweet.createdAt}"/></li> </c:forEach></ul></body></html> |
Твиты показаны с их текстом и датой создания. Содержание моего application.properties:
|
1
2
3
4
5
6
7
|
# Config for JSPsspring.view.prefix: /WEB-INF/jsp/spring.view.suffix: .jsp# SPRING SOCIAL TWITTER (TwitterAutoConfiguration)spring.social.twitter.appId= someAppIdspring.social.twitter.appSecret= someSecretId |
Свойства spring.view предназначены для обработки jsp. Spring.social.twitter свойства и могут быть получены из http://dev.twitter.com . Просто войдите в систему под своей учетной записью Twitter, создайте приложение и получите ключи API. Вот результат:
- Вы можете проверить код на GitHub .
| Ссылка: | Весенний социальный пример весенней загрузки или как я перестал беспокоиться и полюбил автоконфигурацию от нашего партнера по JCG Сезина Карли на пойманном Somewhere In Time = true; блог. |

