在JavaREST/Spring/Hibernate中返回动态值
我继承了一个RESTAPI,它使用JBoss、Spring、Hibernate等。我对所有这些都是新手,所以请原谅(对我来说)这似乎是个愚蠢的问题 执行GET时的基本流程是构建实体列表,将其添加到ModelAndView对象,然后返回它 问题: 如何向响应中添加计算值 我不想将计算出的值存储在数据库中,也不想向返回的每个实体添加成员(即在JavaREST/Spring/Hibernate中返回动态值,java,spring,rest,jboss,Java,Spring,Rest,Jboss,我继承了一个RESTAPI,它使用JBoss、Spring、Hibernate等。我对所有这些都是新手,所以请原谅(对我来说)这似乎是个愚蠢的问题 执行GET时的基本流程是构建实体列表,将其添加到ModelAndView对象,然后返回它 问题: 如何向响应中添加计算值 我不想将计算出的值存储在数据库中,也不想向返回的每个实体添加成员(即ArrayList),但答案从未解决我的问题,即如何向响应添加动态值 编辑:根据请求,这里有一些简化的代码 public ModelAndView getAthl
ArrayList),但答案从未解决我的问题,即如何向响应添加动态值
编辑:根据请求,这里有一些简化的代码
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>
public model和view getatternates(HttpServletRequest-req,HttpServletResponse-res)
抛出WebServiceException{
res.setContentType(“text/xml”);
List athleteStats=athleteManager.getAthleteStats();
映射模型=新的HashMap();
模型放置(“athleteStats”,athleteStats);
ModelAndView ModelAndView=新的ModelAndView(“运动员.ftl”,“模型”,模型);
modelAndView.setCacheable(true);
返回模型和视图;
}
公共类运动员{
私人长id;
私有字符串名称;
私人串故乡;
私有字符串驻留;
私人生日;
//接球手和接球手
}
${athleteStat.athleter.abbrevName}
${athleteStat.athleter.birthdate?字符串(“yyyy-MM-dd'T'HH:MM:ss”)}
${athleteStat.athleter.home}
${athleteStat.athleter.residents}
${athleteStat.athleter.age}
您可以在模型中添加一个额外的地图,将这些动态值映射到每个运动员
像这样:你在哪里
model.put("athleteStats", athleteStats);
添加动态值映射的生成并将其添加到模型:
model.put("athleteStats", athleteStats);
Map<Integer, String> dynamicValues = new HashMap<Integer, String>();
for(AthleteStat athleteStat : athleteStats) {
String dynValue = athleteStat.toString(); /* calculate the dynamic value */
dynamicValues.put(athleteStat.getId(), dynValue);
}
model.put("dynamicValues", dynamicValues);
model.put(“athleteStats”,athleteStats);
Map dynamicValues=newhashmap();
对于(AthleteStat AthleteStat:athleteStats){
字符串dynValue=athleteStat.toString();/*计算动态值*/
dynamicValue.put(athleteStat.getId(),dynValue);
}
模型。put(“动态值”,动态值);
现在添加这条线来映射它:
<Dynamic>
<#if model.dynamicValues.get(athleteStat.athlete.id)?exists>
${model.dynamicValues.get(athleteStat.athlete.id)}
</#if>
</Dynamic>
${model.dynamicValue.get(athleteStat.athleter.id)}
比如:
。。。
${athleteStat.athleter.age}
${model.dynamicValue.get(athleteStat.athleter.id)}
您可以在模型中添加一个额外的地图,将这些动态值映射到每个运动员
像这样:你在哪里
model.put("athleteStats", athleteStats);
添加动态值映射的生成并将其添加到模型:
model.put("athleteStats", athleteStats);
Map<Integer, String> dynamicValues = new HashMap<Integer, String>();
for(AthleteStat athleteStat : athleteStats) {
String dynValue = athleteStat.toString(); /* calculate the dynamic value */
dynamicValues.put(athleteStat.getId(), dynValue);
}
model.put("dynamicValues", dynamicValues);
model.put(“athleteStats”,athleteStats);
Map dynamicValues=newhashmap();
对于(AthleteStat AthleteStat:athleteStats){
字符串dynValue=athleteStat.toString();/*计算动态值*/
dynamicValue.put(athleteStat.getId(),dynValue);
}
模型。put(“动态值”,动态值);
现在添加这条线来映射它:
<Dynamic>
<#if model.dynamicValues.get(athleteStat.athlete.id)?exists>
${model.dynamicValues.get(athleteStat.athlete.id)}
</#if>
</Dynamic>
${model.dynamicValue.get(athleteStat.athleter.id)}
比如:
。。。
${athleteStat.athleter.age}
${model.dynamicValue.get(athleteStat.athleter.id)}
您能为运动员提供一点代码吗?
还有一个返回它的控制器方法。将序列化更改为JSON取决于您现在的操作方式。@acdcjunior.getAtheletes()方法生成一个简单AthleteStat对象列表,并与一个athleters.ftl一起传递到ModelAndView对象中。我试图在GetAthletes方法或.ftlca中附加一个计算值。您可以为athleters
提供一点代码吗?还可以提供一个返回它的控制器方法。将序列化更改为JSON取决于您现在的操作方式。@acdcjunior当然可以。getAthletes()方法生成简单AthleteStat对象的列表,并与athleters.ftl一起传递到ModelAndView对象中。我正在尝试在getAthletes方法或.ftlsweet中附加计算值。谢谢您的帮助!非常感谢。谢谢您的帮助!