我继承了一个使用 JBoss、Spring、Hibernate 等的 REST API,而且我对所有这些都是新手,所以请原谅(对我来说)看似愚蠢的问题。
执行 GET 时的基本流程是构建实体列表,将其添加到 ModelAndView 对象,然后返回。
问题: 如何将计算值添加到响应中?
我不想将计算值存储在数据库中,也不想为每个返回的实体添加一个成员(即ArrayList<Athletes>
,在 Athletes 类中添加一个“领导者后面的点”成员)。我只是想对每个请求执行计算并将一个成员附加到具有该动态值的 json 响应中,如下所示:
{
"Athlete1" : {"name" : "bob", "someDynamicValue" : "124548412" }
}
似乎这会比较常见,但我似乎无法找到一个简单的解决方案......也许我只是不确定如何正确地提出这个问题。
任何帮助,将不胜感激。
PS - 我认为这会帮助我使用 Spring 在 Rest API 中返回实体,但答案从未解决我的问题,即如何向响应添加动态值。
编辑:根据请求,这里有一些简化的代码
public ModelAndView getAthletes(HttpServletRequest req, HttpServletResponse res)
throws WebServiceException {
res.setContentType("text/xml");
List<AthleteStat> athleteStats = athleteManager.getAthleteStats();
Map<String, Object> model = new HashMap<String, Object>();
model.put("athleteStats", athleteStats);
ModelAndView modelAndView = new ModelAndView("athletes.ftl", "model", model);
modelAndView.setCacheable(true);
return modelAndView;
}
public class AthleteStat{
private Long id;
private String name;
private String hometown;
private String resides;
private Date birthdate;
//getters and setters
}
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<#escape x as x?xml>
<response status="ok">
<Data>
<Athletes>
<#list model.athleteStats as athleteStat>
<Athlete Name="${athleteStat.athlete.name}" InternalID="${athleteStat.athlete.id?c}">
<AbbrevName><#if athleteStat.athlete.abbrevName?exists>${athleteStat.athlete.abbrevName}</#if></AbbrevName>
<Birthdate><#if athleteStat.athlete.birthdate?exists>${athleteStat.athlete.birthdate?string("yyyy-MM-dd'T'HH:mm:ss")}</#if></Birthdate>
<Hometown><#if athleteStat.athlete.hometown?exists>${athleteStat.athlete.hometown}</#if></Hometown>
<Resides><#if athleteStat.athlete.resides?exists>${athleteStat.athlete.resides}</#if></Resides>
<Age><#if athleteStat.athlete.age?exists>${athleteStat.athlete.age}</#if></Age>
</Athlete>
</#list>
</Athletes>
</Data>
</response>
</#escape>