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地址时,我们将看到的结果。



源码下载:git@github.com:owenwilliam/masterSpringMVC.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值