运用我们的工具,我们可以很容易看到我们服务器发生的请求。默认是JSON的格式。JSON会格式化二进制的结果通过使用Spring Boot,其实实例化就是通过调用getter方法。
我希望看下面的信息:
通过我们在Bean的添加注解,我们可以很容易去定某个领域的实例化。你可以运用@JsonIgnoreProperties的注解,你也可以运用@JsonIgnore不理采某些属性。
在我们的例子中,Tweet类不是我们自己本地的,它是SpringSocial Twitter的部分,所以我们不需要任何的注解。
对于我们最好的选择就是直接运用实例化后的模型类。它关系到你模型的实例化,需要保持详细的应用。
当我们处理不修改的代码,Jackson提供了两个选择:
1) 创建专用的类用于实例化
2) 运用混合的方法,这个简单的类将会连接你自己的模型类。这个就需要你在代码中注解,使用Jackson的注解。
我们想要控制输出的API,所以我们创建一个LightTweet类。
package masterSpringMVC5.search; import org.springframework.social.twitter.api.Tweet; import org.springframework.social.twitter.api.TwitterProfile; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; /** * 从Twitter上查找信息 * Created by OwenWilliam on 2016/5/21. */ public class LightTweet { private String profileImageUrl; private String user; private String text; private LocalDateTime date; private String lang; private Integer retweetCount; public LightTweet(String text) { this.text = text; } /** * 获取API的信息 * @param tweet * @return */ public static LightTweet ofTweet(Tweet tweet) { LightTweet lightTweet = new LightTweet(tweet.getText()); Date createdAt = tweet.getCreatedAt(); if(createdAt != null) { lightTweet.date = LocalDateTime.ofInstant(createdAt.toInstant(), ZoneId.systemDefault()); } TwitterProfile tweetUser = tweet.getUser(); if (tweetUser != null) { lightTweet.user = tweetUser.getName(); lightTweet.profileImageUrl = tweetUser.getProfileImageUrl(); } lightTweet.lang = tweet.getLanguageCode(); lightTweet.retweetCount = tweet.getRetweetCount(); return lightTweet; } public String getProfileImageUrl() { return profileImageUrl; } public void setProfileImageUrl(String profileImageUrl) { this.profileImageUrl = profileImageUrl; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getText() { return text; } public void setText(String text) { this.text = text; } public LocalDateTime getDate() { return date; } public void setDate(LocalDateTime date) { this.date = date; } public String getLang() { return lang; } public void setLang(String lang) { this.lang = lang; } public Integer getRetweetCount() { return retweetCount; } public void setRetweetCount(Integer retweetCount) { this.retweetCount = retweetCount; } }
现在我们需要SearchService类可以返回LightTweets类,作下面的修改。
/** * 查找 * @param searchType * @param keywords * @return */ public List<LightTweet> search(String searchType, List<String> keywords) { List<SearchParameters> searches = keywords.stream().map(taste -> createSearchParam(searchType, taste)).collect(Collectors.toList());; List<LightTweet> results = searches.stream().map(params -> twitter.searchOperations().search(params)) .flatMap(searchResults -> searchResults.getTweets().stream()) .map(LightTweet :: ofTweet) .collect(Collectors.toList()); return results; }
当然,我们也需要修改resultPage.html的文件。
<div class="row" layout:fragment="content"> <h2 class="indigo-text center" th:text="|Tweet results for ${search}|">Tweets</h2> <ul class="collection"> <li class="collection-item avatar" th:each="tweet : ${tweets}"> <img th:src="${tweet.profileImageUrl}" alt="" class="circle"/> <span class="title" th:text="${tweet.user}">Username</span> <p th:text="${tweet.text}">Tweet message</p> </li> </ul> </div>
当我们运行http://localhost:8080/api/search/mixed;keywords=springFramework地址时,我们将看到的结果。