我有一个API端点,用于接收JSON文件,并根据这些文件创建对象。我也有另一个预先存在的对象,并且我正在尝试检查接收到的JSON中的某些值是否与我现有对象中的某些值匹配。如果字段匹配,我将继续进一步处理文件,否则,我将对其进行剪贴。到目前为止,我的想法只是让if语句检查每个值,但是有更好的方法吗?还是陈述是否正确?
仅使用if语句的意思非常简单的代码示例。
public boolean compareObjects(recievedObject, existingObject) {
if( !(recievedObject.getName().equals(existingObject.getName()))) {
//true
} else if( !(recievedObject.getLocation().equals(existingObject.getLocation())) ) {
return false;
}
// else if ... etc
return true;
}
请注意,我并不是要检查接收到的文件是否具有所有必需的JSON字段,只是一些特定字段具有某些值。
编辑:
JSON将是一个非常扁平的结构,例如
{
"name": "name",
"location": "location",
...
}
所以我的对象将是非常基本的
public class recievedObject {
String location;
String name;
public String getLocation() {
return location;
}
public String getName() {
return name;
}
}
答案 0 :(得分:0)
为您的类定义一个类似于“等于”的方法,并在端点处检查existingObject.check(receivedObject),将import java.util.Objects添加到您的类中
public boolean check(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
RecievedObject receivedObject=(RecievedObject) o;
//add based on the logic you want
return Objects.equals(location, receivedObject.location) &&
Objects.equals(name, receivedObject.name);
}
答案 1 :(得分:0)
您可以避免很多其他陈述,而是创建一些验证抽象。
interface Validator<A, B> {
boolean validate(A receivedObject, B existingObject);
}
然后为每个if
创建Validator
的新实现。
class NameValidator implements Validator<Expeceted, Received> {
@Override
public boolean validate(Expeceted receivedObject, Received existingObject) {
return existingObject.getName().equals(receivedObject.getName());
}
}
class LocationValidator implements Validator<Expeceted, Received> {
@Override
public boolean validate(Expeceted receivedObject, Received existingObject) {
return existingObject.getLocation().equals(receivedObject.getLocation());
}
}
您可以创建此类验证器的列表
List<Validator<Expeceted, Received>> validators = Arrays.asList(
new NameValidator(),
new LocationValidator()
);
最后,您的compare方法可以简单地遍历所有验证器。
public boolean compareObjects(Received recievedObject, Expeceted expecetedObject) {
for (Validator<Expeceted, Received> validation : validators) {
if (! validation.validate(expecetedObject, recievedObject)) {
return false;
}
}
return true;
}
这样,您可以稍后简单地添加新的验证器,并保持compare方法不变。