用json回复Spring Restful Web服务

时间:2014-04-29 19:14:08

标签: java json spring rest spring-mvc

我有一个Spring MVC restful webservice,它回复了所有产品的列表。

目前我在Bean列表中返回所有数据。

List<ProdBean> results = jdbcTemplate.query("select * from Prods",
    new RowMapper<ProdBean>() {
    @Override
    public ProdBean mapRow(ResultSet rs, int rowNum) throws SQLException {
        ProdBean gb = new ProdBean();
        gb.setProdId(rs.getInt("ProdId"));
        gb.setProdName(rs.getInt("ProdName"));
        // Few more params
        return gb;
    }
});

return results; //I want to convert this to a json object. 

如何转换List<ProdBean> results以创建json对象并将其用作返回参数?

抽象 -

[{"prodId":1, "prodName":"A"}, {"prodId":2, "prodName":"B"}, ... ]

这可以使用一些注释来完成吗?

2 个答案:

答案 0 :(得分:1)

使用@ResponseBody注释。返回的值将转换为JSON(默认使用Jackson)。

@Controller
@RequestMapping("/foo")
public class JSONController {

    /**
     * This method will return [{"prodId":1, "prodName":"A"}, {"prodId":2, "prodName":"B"}, ... ]
     */
    @ResponseBody
    @RequestMapping(value="/bar", method = RequestMethod.GET)
    public List<ProdBean> getJson() {
        List<ProdBean> results = ...
        return results;
    }
}

如果您使用的是Spring 4,则可以使用新的@RestController注释,并删除方法上的@ResponseBody注释。

<强>更新

你必须在类路径上有.jar

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.2.2</version>
</dependency>

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-annotations</artifactId>
     <version>2.2.2</version>
</dependency>

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-core</artifactId>
     <version>2.2.2</version>
 </dependency>

答案 1 :(得分:1)

在返回类型定义中使用@responsebody注释,如果在设置中使用mvc注释驱动它应该可以正常工作。返回类型必须与Json匹配。