有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

仅当填写了所有字段时,java才使用JAXB将JSON转换为对象

我正在用Jersey构建一个RESTful web服务。我使用JAXB将传入的JSON对象转换为Java对象。不幸的是,这种方法允许创建没有所有必填字段的Java对象。如果我有3个必填字段,但JSON只包含1个字段,我希望看到抛出异常

资源类别:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Resource {
  private int    field1;
  private String field2;
  private String field3;

  public Resource() {

  }

  ...
}
休息班:
@Path("resource")
public class ResourceREST {

  ...

  @POST
  @Consumes(APPLICATION_JSON)
  @Produces(TEXT_PLAIN)
  public String createResource(Resource resource) {
      ...
  }

  ...
}

有没有可能用JAXB实现这一点?如果没有,如何实现此输入验证

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    在生成JSON之后,我经历了相同的场景,并应用了一些逻辑来解决这个问题

    在一个列表中添加那些你认为必须的Field Names

    public static final List<String> REQUIRED_FIELDS = new ArrayList<String>();
        static {
            REQUIRED_FIELDS.add("Field1");
            REQUIRED_FIELDS.add("Field2");
        };
    

    将已生成的JSON发送到验证方法

    你的验证方法应该是这样的

    public void validateRequiredFields(JSONObject jsonObject, List<String> requiredFields) throws ParserException, Exception {
            if (log.isDebugEnabled()) {
                log.debug("Entering validateForRequiredFields");
            }
            List<String> missingFields = new ArrayList<String>();
            try {
                if (requiredFields != null) {
                    for (String requiredField : requiredFields) {
                        if (ifObjectExists(jsonObject, requiredField)) {
                            if (StringUtils.isEmpty(jsonObject.getString(requiredField))) {
                                missingFields.add(requiredField);
                            }
                        } else {
                            missingFields.add(requiredField);
                        }
                    }
                }
                if (missingFields != null && missingFields.size() > 0) {
                    throw new Exception(missingFields);
                }
            } catch (JSONException e) {
                throw new ParserException("Error occured in validateRequiredFields", e);
            }
        }