运用我们的工具,我们可以很容易看到我们服务器发生的请求。默认是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地址时,我们将看到的结果。
源码下载:git@github.com:owenwilliam/masterSpringMVC.git