SpringMVC的RESTful(二)定制格式

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

SpringMVC的RESTful(二)定制格式_第1张图片

源码下载:[email protected]:owenwilliam/masterSpringMVC5.git

你可能感兴趣的:(spring,spring,Web,mvc,api,http协议,Restful)