gpt4 book ai didi

java - JSON对象到Java对象的映射是如何完成的?

转载 作者:行者123 更新时间:2023-12-01 22:17:38 27 4
gpt4 key购买 nike

我已经使用 Postman API 客户端测试了 REST 服务,该客户端将 JSON 对象传递给服务。

JSON 对象

{
"username" : "user",
"password" : "pass"
}

到 Java 对象的映射已正确完成并返回响应状态 200。

如何在 REST 服务方法的操作中完成 JSON 对象到 Java 对象的映射。

UserCl 类

static class UserCl{

private String uname;
private String password;
private String name;

public UserCl(){
}

public String getName() {
return name;
}

public void setName(String pname) {
this.name = pname;
}

public String getUsername() {
return uname;
}
public void setUsername(String pusername) {
this.uname = pusername;
}
public String getPassword() {
return password;
}
public void setPassword(String ppassword) {
this.password = ppassword;
}

}

REST 服务方法

@PermitAll
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/auth")
public Response login(UserCl usr){

if(usr.getUsername().compareTo("user") == 0 && usr.getPassword().compareTo("pass") == 0){

String usernameAndPassword = usr.getUsername() + ":" + usr.getPassword();

try {

String base64String = Base64Encoder.encode(usernameAndPassword);
System.out.println(base64String);

return Response.status(200).build();


} catch (IOException e) {
e.printStackTrace();
return Response.status(401).build();
}
}
else{
return Response.status(401)build();
}

}

最佳答案

Resteasy 默认使用 Jackson。基本行为(与大多数序列化框架的情况一样)是查找 JavaBean属性( getter / setter )。对于反序列化,setter 会被内省(introspection)。他们应该遵循JavaBean naming convention 。如果您的情况

private String username;

public void setUsername(String string) {}

从方法名称中删除set,并且首字母小写。因此 setUsername 映射到 "username" JSON 属性。

序列化时,将使用 getter。就像反序列化一样,get 被删除并且第一个字母小写。因此,getUsername 会将 "username" 属性添加到生成的 JSON 中。

还可以使用 Jackson 注释来更改属性名称。例如

@JsonProperty("name")
private String username;

但这需要您将 Jackson 作为编译时依赖项添加到您的项目中。

编辑

补充一点,对于 Jackson,我们不必使用 JavaBean 属性。即使对于公共(public)字段,也会使用字段的名称。不太推荐,只是想把它扔掉。

关于java - JSON对象到Java对象的映射是如何完成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30681313/

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