Java RESTful API - JSON repsonse不返回Object的某些字段

时间:2016-07-14 13:13:38

标签: java json rest jersey

对于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响应没有iddateCreated字段。我期待它们在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);
}
}

1 个答案:

答案 0 :(得分:0)

看起来rest提供的对象映射机制会调用默认构造函数public Profile() {},并使用setter来放置用户名,fName,sName, 而不是调用public Profile(String username, String fName, String sName)

您应该在服务中设置ID并创建日期。