Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将Play框架模型转换为XML和JSON?_Java_Scala_Playframework_Playframework 2.0 - Fatal编程技术网

Java 如何将Play框架模型转换为XML和JSON?

Java 如何将Play框架模型转换为XML和JSON?,java,scala,playframework,playframework-2.0,Java,Scala,Playframework,Playframework 2.0,Play框架是否有一种本机或推荐的方式将Play模型转换为XML/JSON?类似于JAXB或Jackson的东西 有些人建议使用XML/JSON,但这非常冗长,不能保证格式良好的XML/JSON 图中仅显示了使用字符串连接构建的XML响应,如下所示: return ok("<message \"status\"=\"OK\">Hello " + name + "</message>"); 是否有一种标准的方法可以使用Play将模型序列化为XML/JSON 有关于这个主题

Play框架是否有一种本机推荐的方式将Play模型转换为XML/JSON?类似于JAXB或Jackson的东西

有些人建议使用XML/JSON,但这非常冗长,不能保证格式良好的XML/JSON

图中仅显示了使用字符串连接构建的XML响应,如下所示:

return ok("<message \"status\"=\"OK\">Hello " + name + "</message>");
是否有一种标准的方法可以使用Play将模型序列化为XML/JSON


有关于这个主题的官方播放文档吗?

对于JSON,我建议使用
org.codehaus.jackson
,在
play 2/x

对于
XML
,模板方法足够公平,因为您可以使用视图呈现适当的XML

编辑:

<UserRoot>
    <name>John Smith</name>
    <age>25</age>
</UserRoot>
Json和Ebean

遗憾的是,Ebean在将其对象序列化为JSON时遇到了问题,因此我总是使用专用的内部类(在目标模型中,它只包含字段,应该用JSON发送)ie,用于
User
model:

ForJson的公共静态类{
公共长id;
公共字符串名称;
公共字符串电子邮件;
public-ForJson(用户){
this.id=user.id;
this.name=user.name;
this.email=user.email;
}
}
路线:

GET     /users/all.json            controllers.Application.listUsersJson
GET     /users/all-details.json    controllers.Application.listUsersJsonWithDetails
GET     /users/:id.json            controllers.Application.singleUserJson(id: Long)
行动:

公共静态结果listUsersJson(){
List usersToJson=new ArrayList();
for(用户:User.find.all()){
usersToJson.add(newuser.ForJson(User));
}
返回ok(Json.toJson(usersToJson));
}
公共静态结果singleUserJson(长id){
User.ForJson userForJson=new User.ForJson(User.find.byId(id));
返回ok(Json.toJson(userForJson));
}
公共静态结果列表UsersJSONWithDetails(){
映射详细信息=新建LinkedHashMap();
List usersToJson=new ArrayList();
for(用户:User.find.all()){
usersToJson.add(newuser.ForJson(User));
}
详情。放置(“日期”,新日期());
put(“count”,usersToJson.size());
details.put(“用户”,usersToJson);
返回ok(Json.toJson(details));
}
是的,我知道这可能是reduntand编码,但我至少总是有正确的JSON输出,而且我不需要在每个操作中逐行创建JSON

XML:

<UserRoot>
    <name>John Smith</name>
    <age>25</age>
</UserRoot>
HTML字符不会中断正确XML的呈现,因为默认情况下,Play的模板会转义它们,因此它将在XML节点内使用

<sample>Say &quot;ellou&quot;<sample>
@XmlRootElement(name = "UserRoot")
说“ellou”
选中(页面底部)

此外,您还可以使用部分模板-以确保单个项目在这两种格式中的格式完全相同:
users/1.xml
users/all.xml

简短回答:forJSON和forxml

它本身不提供任何有关编组模型的文档,但它附带了可以完成此工作的第三方库


JSON:

<UserRoot>
    <name>John Smith</name>
    <age>25</age>
</UserRoot>
模型:

public class User extends Model {
    public String username;
    public Long   age; 

    @JsonIgnore
    public String password; // field won't be marshalled
}
使用jackson的方法将其转换为JSON

JSON输出:

{
    "username" : "John Smith",
    "age"      : "25"
}

XML:

<UserRoot>
    <name>John Smith</name>
    <age>25</age>
</UserRoot>
必须小心,因为它的模型如何发挥引擎盖下。在代码中看不到getter和setter,但它们在运行时存在

在模型上,将注释设置为非常重要。这告诉JAXB从getter/setter序列化,而不是从底层字段进行序列化

@XmlAccessorType(XmlAccessType.PROPERTY)
我们还必须添加一个注释,用于指定根XML节点的名称:

<sample>Say &quot;ellou&quot;<sample>
@XmlRootElement(name = "UserRoot")
要省略字段,必须将注释添加到getter。由于源代码中没有getter,我们必须为每个要省略的字段添加一个getter

@XmlAccessorType(XmlAccessType.PROPERTY)
public class User extends Model {
    public String username;
    public Long   age;

    @JsonIgnore
    public String password;


    @XmlTransient // This means ignore this property
    public String getPassword() {
        return this.password;
    }
}
编组由JAXB类和

输出:

<UserRoot>
    <name>John Smith</name>
    <age>25</age>
</UserRoot>

约翰·史密斯

虽然提供了一些关于使用json/xml的信息,但似乎没有任何Play文档描述如何进行编组。为此,我们必须查看第三方库和文档。

有更好的JSON转换方法

User user = new User("...");
String jsonString = Ebean.json().toJson(user);

谢谢你,比西尔。jackson文档一次构建一个json字段。我要寻找的是一种在一条语句中将模型自动转换为json的方法,使用java类名和java字段名作为相应的json标识符。这对杰克逊有可能吗?你知道有任何文件描述这一点吗?XML模板方法的问题在于它并不总是返回格式良好的XML。例如,如果数据包含任何特殊字符,如<或>或,这将在运行时破坏xml。保证良好形式的生成器是必不可少的。谢谢,我不知道XML的格式化程序,无论如何,我仍然认为可以使用模板,请检查我的编辑。你在这里的评论救了我,我认为Play不支持创建JSON数组的简单方法是荒谬的!!!为什么它不支持play.libs.Json.newObject()的put(ArrayList())???谢谢你的回答!怎么样
yourObjectNode.put(“items”,Json.toJson(yourArray))