我正在使用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() {
}
...
}
REST类:
@Path("resource")
public class ResourceREST {
...
@POST
@Consumes(APPLICATION_JSON)
@Produces(TEXT_PLAIN)
public String createResource(Resource resource) {
...
}
...
}
有没有可能用JAXB做到这一点?如果没有,我如何实现此输入验证?
提前致谢!
答案 0 :(得分: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);
}
}