对于Java RESTful API,我是新手。我目前的问题是JSON响应没有返回某些字段。这就是我的意思;
我有一些JSON代码,用于创建用户个人资料。
{
"fName": "fUser",
"sName": "sUser",
"username": "helloUser"
}
我将此代码发送到相应的POST
方法,之后我期待JSON响应。这就是我期望的回应;
{
"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
构造函数中的这些字段赋值。
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
@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
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
@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);
}
}
答案 0 :(得分:0)
看起来rest提供的对象映射机制会调用默认构造函数public Profile() {}
,并使用setter来放置用户名,fName,sName,
而不是调用public Profile(String username, String fName, String sName)
。
您应该在服务中设置ID并创建日期。