gpt4 book ai didi

java - 将 json 对象传递给 Play Framework 操作

转载 作者:行者123 更新时间:2023-11-30 09:27:07 24 4
gpt4 key购买 nike

我目前使用的是 Play v1.2.3。我有一个端点,我想将一个 json 对象发送到该端点,该对象将被反序列化为 Java 对象。所以,我有一些看起来像这样的东西:

public class UserController extends Controller {

public static class FullName {
public String first;
public String last;
}

public static void putName( FullName name ) { ... }
}

##### routes
PUT /user/name UserController.putName

有了它,我希望用给定的 javascript 调用端点:

$.ajax({
type: "PUT",
data: { first: "Michael", last: "Bailey" },
url: "/user/name"
});

不幸的是,通过上述设置,play 似乎不想发送整个数据对象,而是试图填充两个参数(第一个和最后一个)。有没有办法定义端点直接消费完整的 body ,还是必须手工完成?

最佳答案

将整个输入主体转换为模型类:

public static void create(JsonObject body) {
CaseFolder caseFolder = new Gson().fromJson(body, CaseFolder.class);
caseFolder.user = getConnectedUser();

if(caseFolder.validateAndSave()) {
renderJSON(
new JSONSerializer()
.exclude("*.class")
.exclude("user")
.serialize(caseFolder));
} else
error();
}

此外,上述代码获取生成的 Model 对象并将其序列化回 JSON 作为响应主体。

如果您只想访问 JSON 请求中的某些字段,您可以使用:

public static void update(JsonObject body) {
try {
Long id = (long) body.get("id").getAsInt();
CaseFolder cf = CaseFolder.loadAndVerifyOwner(getConnectedUser(), id);
cf.number = body.get("number").getAsString();
cf.description = body.get("description").getAsString();
if(cf.validateAndSave())
ok();
else
error();
}
catch (NullIdException e) {error();}
catch (NotFoundException e) {notFound();}
catch (NotOwnerException e) {forbidden();}
catch (Exception e) {e.printStackTrace(); error();}
}

关于java - 将 json 对象传递给 Play Framework 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com