用于在java REST Web服务中生成JSON的框架



我使用 Apache cxf 和 spring 框架编写了一个 java REST Web 服务。我的服务正在正确生成 XML。但是当我从 XML 媒体类型更改为 JSON 时,我得到以下输出

No message body writer has been found for class java.util.ArrayList, ContentType: application/json

我是否需要使用任何其他库,例如杰克逊(我不知道它是什么(来生成 JSON。这是我的模型类

package au.com.fxa.sfdc.custdocs.Model;
import java.math.BigDecimal;
import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Statement
{
private Date statementDate;
private BigDecimal totalAmount;
private String imageLocation;
private String accountNumber;
public Statement(){}
public Date getStatementDate()
{
return this.statementDate;
}
//    public String getFormattedStatementDate()
//    {
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//        return sdf.format(this.statementDate);
//    }
public BigDecimal getTotalAmount()
{
return this.totalAmount;
}
public void setStatementDate(Date statementDate)
{
this.statementDate = statementDate;
}
public void setTotalAmount(BigDecimal totalAmount)
{
this.totalAmount = totalAmount;
}
public String getImageLocation()
{
return this.imageLocation;
}
public void setImageLocation(String imageLocation)
{
this.imageLocation = imageLocation;
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
}

这是我的服务方法下的代码

@GET
@Path("{custid}/statements")
@Produces({MediaType.APPLICATION_JSON})
@Consumes({"application/x-www-form-urlencoded"})
public List<Statement> getStatementsListByAccountId(
@PathParam("custid") String account,
@DefaultValue("") @QueryParam("fromdate") String fromDate,
@DefaultValue("") @QueryParam("todate") String toDate) throws Exception {

Date from = null;
Date to = null;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
if(!fromDate.equals(""))
{
from = formatter.parse(fromDate);
}
if(!toDate.equals(""))
{
to = formatter.parse(toDate);
}
ArrayList<Statement> statements = (ArrayList<Statement>) CustomerBiz.getStatements("Statements",account,from,to);
return  statements;
}

我错过了什么??

最简单的方法是将列表包装在容器中,如此处建议。例:

@XmlRootElement
public class Statements {
private List<Statement> statements;
public List<Statement> setStatements(List<Statement> statements) {
this.statements = statements;
}
@XmlElement
public List<Statement> getStatements() {
return statements;
}
}

更多信息:Jackson是一个JSON处理库,这意味着id能够解析JSON并执行数据绑定等。根据这篇文章,似乎还有其他方法可以通过使用杰克逊来使其工作,避免使用包装器。

相关内容

  • 没有找到相关文章

最新更新