如何从Spring RESTful服务返回JSON并使用RestTemplate类访问它

时间:2014-05-13 07:15:50

标签: spring rest

我制作了一个Spring RESTful网络服务,用于提供JSON格式的顶级歌曲列表,为此我在List中添加了歌曲名称,我从我的Spring RESTful Web服务的@Restcontroller返回了这个.SO @RestController将自动处理这个列表和rturns我这个JSON形式[“song1”,“song2”,“song3”]。

现在任何人都可以告诉我如何使用更多属性(如)返回歌曲名称   - (歌曲名称,电影,歌词,歌手,总点击次数) 例如 - (“Lungi Dance”,“Chennai Express”,“Honey Singh”,“Honey Singh”,5000)。还告诉我如何使用RestTemplate调用此Web服务的Spring MVC应用程序。 /强> 请告诉我下面文件的变化。

在我的Spring RESTful Web服务的@RestController类中

@RequestMapping(value = "/topsongsWS", headers="Accept=application/json")
    Public List<?> getTopSongsWS() 
    {
            List<String> l1 = new ArrayList<String>();
            l1.add("mann mera (Table No 21)");
            l1.add("Lazy lad (Ghanchakkar)");
            l1.add("Oye boy Charlie (Matru Ki Bijli Ka Mandola)");
            l1.add("Blue Hai Pani Pani");
            l1.add("Latt lag gayi (Race 2)");
            return l1;
    }

在我的config-servlet.xml

<context:component-scan base-package="com.songs.service.controller" />
<mvc:annotation-driven />

在我的Spring MVC应用程序的控制器内部调用以上RESTful Web服务

@RequestMapping(value="/topsongs",method=RequestMethod.POST)
    public String getTopSongs(ModelMap md)
    { 
            //did stuff to configure headers & entity
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            HttpEntity<String> entity = new HttpEntity<String>(headers);

            //this is the URL of my RESTfulservice returning JSON format    ["song1","song2","song3"]   
            String url="http://localhost:7001/SongAppWS/songappWS/topsongsWS";
            RestTemplate rt=new RestTemplate();
            ResponseEntity<?> listoftopmovies=rt.exchange(url,HttpMethod.GET,entity, List.class);
            md.addAttribute("listname", "Top 5 Songs of The Week:");
            String response=listoftopmovies.getBody().toString();
            List<String> listed = new ArrayList<String>(Arrays.asList(response.split(", ")));
            md.addAttribute("res",listed);
            return "Sucess";
    }

2 个答案:

答案 0 :(得分:1)

要返回具有更多属性的歌曲,您应该创建一个资源表示类。在您的情况下,它可能看起来像

class Song {
private String name
private String film
//other fields and methods...

然后在你的restfull ws

@RequestMapping(value = "/topsongsWS", headers="Accept=application/json")
public List<?> getTopSongsWS() 
{
        List<Song> l1 = new ArrayList<Song>();
        l1.add(new Song(atr1,atr2....));
        l1.add(new Song(atr1,atr2....));
        l1.add(new Song(atr1,atr2....)); 
        return l1;
}

在你的spring mvc app中,你也应该有资源表示类,响应类型现在是Song而不是String 要消耗你的ws,这应该可行

@RequestMapping(value="/topsongs",method=RequestMethod.POST)
public String getTopSongs(ModelMap md)
{ 
String url="http://localhost:7001/SongAppWS/songappWS/topsongsWS";
RestTemplate rt=new RestTemplate();
Song[] songs = template.getForObject(url, Song[].class); 

md.addAttribute("listname", "Top 5 Songs of The Week:");
md.addAttribute("res", Arrays.asList(songs));  
return "Sucess";    

}

答案 1 :(得分:0)

你必须使用像List

这样的模型类

请在github中查看以下源代码。它以json响应为对象。希望它会有所帮助。 https://github.com/mohansaravanan/spring https://github.com/mohansaravanan/spring/tree/master/springmvc-3.2.2