在JavaREST/Spring/Hibernate中返回动态值

在JavaREST/Spring/Hibernate中返回动态值,java,spring,rest,jboss,Java,Spring,Rest,Jboss,我继承了一个RESTAPI,它使用JBoss、Spring、Hibernate等。我对所有这些都是新手,所以请原谅(对我来说)这似乎是个愚蠢的问题 执行GET时的基本流程是构建实体列表,将其添加到ModelAndView对象,然后返回它 问题: 如何向响应中添加计算值 我不想将计算出的值存储在数据库中,也不想向返回的每个实体添加成员(即ArrayList),但答案从未解决我的问题,即如何向响应添加动态值 编辑:根据请求,这里有一些简化的代码 public ModelAndView getAthl

我继承了一个RESTAPI,它使用JBoss、Spring、Hibernate等。我对所有这些都是新手,所以请原谅(对我来说)这似乎是个愚蠢的问题

执行GET时的基本流程是构建实体列表,将其添加到ModelAndView对象,然后返回它

问题: 如何向响应中添加计算值

我不想将计算出的值存储在数据库中,也不想向返回的每个实体添加成员(即
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中附加计算值。谢谢您的帮助!非常感谢。谢谢您的帮助!