SpringMVC的RESTful(二)定制格式

来源:互联网 发布:弯矩图绘制软件 编辑:程序博客网 时间:2024/05/22 00:20

运用我们的工具,我们可以很容易看到我们服务器发生的请求。默认是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

0 0
原创粉丝点击