Java RESTful API-JSON响应不返回对象的某些字段 [英] Java RESTful API - JSON repsonse doesn't return some fields of an Object
问题描述
关于Java RESTful API,我是一个新手.我当前的问题是JSON响应未返回某些字段.这就是我的意思;
I am a newbie when it comes to Java RESTful API's. My current problem is that the JSON response is not returning some fields. Here is what I mean;
我有一些JSON代码,这些代码将用于创建用户个人资料.
I have some JSON code which will be used to create a user profile.
{
"fName": "fUser",
"sName": "sUser",
"username": "helloUser"
}
我将此代码发送到适当的POST
方法,此后我期待一个JSON响应.这就是我期望的回应;
I send this code to the appropriate POST
method and afterwards I am expecting a JSON response. This is what I expect the response to be;
{
"id": "003629d7-90ea-4139-9752-c9a8a21306f6",
"fName": "fUser",
"sName": "sUser",
"username": "helloUser",
"dateCreated: "Thu Jul 14 13:42:29 BST 2016"
}
相反,我返回的JSON响应没有id
和dateCreated
字段.我在JSON响应中期望它们,因为我为Profile
构造函数中的这些字段分配了一个值.
Instead the JSON response that I get back doesn't have the id
and dateCreated
field. I was expecting them in the JSON response because I assign a value to these fields in the Profile
constructor.
DatbaseClass.java
DatbaseClass.java
public class DatabaseClass {
private static Map<Long, Message> messages = new HashMap<>();
private static Map<String, Profile> profiles = new HashMap<>();
public static Map<Long, Message> getAllMessages() {
return messages;
}
public static Map<String, Profile> getAllProfiles() {
return profiles;
}
}
Profile.java
Profile.java
@XmlRootElement
public class Profile {
private String id;
private String username;
private String fName;
private String sName;
private Date dateCreated;
public Profile() {}
// Here I set the id and the dateCreated. Which is why I am expecting
// the JSON response to show them.
public Profile(String username, String fName, String sName) {
this.id = UUID.randomUUID().toString();
this.username = username;
this.fName = fName;
this.sName = sName;
this.dateCreated = new Date();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getfName() {
return fName;
}
public void setfName(String fName) {
this.fName = fName;
}
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public Date getDateCreated() {
return dateCreated;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Profile [\nid=");
builder.append(id + "\n");
builder.append(", username=");
builder.append(username + "\n");
builder.append(", fName=");
builder.append(fName + "\n");
builder.append(", sName=");
builder.append(sName + "\n");
builder.append(", dateCreated=");
builder.append(dateCreated);
builder.append("\n]" + "\n\n");
return builder.toString();
}
}
ProfileService.java
ProfileService.java
public class ProfileService {
private Map<String, Profile> profiles = DatabaseClass.getAllProfiles();
public ProfileService() {}
public List<Profile> getProfiles() {
return new ArrayList<>(profiles.values());
}
public Profile getProfile(String username) {
if(!profiles.containsKey(username)) {
throw new NotFoundException(
"The profile " + username + " does not exist.");
}
return profiles.get(username);
}
public Profile addProfile(Profile profile) {
final String username = profile.getUsername();
if(profiles.containsKey(username)) {
throw new BadRequestException(
"The profile " + username + " already exists.");
}
profiles.put(profile.getUsername(), profile);
return profiles.get(profile.getUsername());
}
public Profile updateProfile(Profile profile) {
if(profile.getUsername().isEmpty()) {
return null;
}
profiles.put(profile.getUsername(), profile);
return profiles.get(profile.getUsername());
}
public Profile deleteProfile(String username) {
return profiles.remove(username);
}
}
ProfileResource.java
ProfileResource.java
@Path("profiles")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class ProfileResource {
private ProfileService pService = new ProfileService();
@POST
public Profile addProfile(Profile profile) {
return pService.addProfile(profile);
}
@GET
public List<Profile> getProfiles() {
return pService.getProfiles();
}
@GET
@Path("{username}")
public Profile getProfile(@PathParam("username") String username) {
return pService.getProfile(username);
}
@PUT
@Path("{username}")
public Profile updateProfile(@PathParam("username") String username,
Profile profile) {
return pService.updateProfile(profile);
}
@DELETE
@Path("{username}")
public Profile deleteProfile(@PathParam("username") String username) {
return pService.deleteProfile(username);
}
}
推荐答案
由rest提供的类似对象映射机制将调用默认构造函数public Profile() {}
,并使用setter来放置用户名fName,sName,
而不是调用public Profile(String username, String fName, String sName)
.
Looks like object mapping mechanism provided by rest will call the default constructor, which is public Profile() {}
, and use setter to put the username, fName, sName,
instead of calling public Profile(String username, String fName, String sName)
.
您应该在服务中设置ID和创建日期.
You should set the id and create date in the service.
这篇关于Java RESTful API-JSON响应不返回对象的某些字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!