Java RESTful API-JSON响应不返回对象的某些字段 [英] Java RESTful API - JSON repsonse doesn't return some fields of an Object

查看:230
本文介绍了Java RESTful API-JSON响应不返回对象的某些字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

关于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响应没有iddateCreated字段.我在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆