我的项目中有一个property.yml文件,如下所示:
css
我使用以下java代码从上面的yml文件进行反序列化:
propertyA : "valueA"
propertyB: "valueB"
propertyC: "valueC"
现在,我需要编写单元测试。我的代码验证了如果yml文件中缺少任何propertyA,propertyB和propertyC,代码应抛出异常。
有没有办法可以让mapper在反序列化期间忽略某些字段(假设property.yml中没有这些字段)并执行我的测试?
property.yml实际上包含了巨大的号码。属性(= n,比方说)。生成n个property.yml文件进行测试是不可行的,而在每个文件中都会丢失一个属性。
答案 0 :(得分:0)
您可以在类级别使用@JsonIgnoreProperties(ignoreUnknown = true)。
答案 1 :(得分:0)
你应该配置反序列化器不要在未知属性上失败:
File configFile = new File(classLoader.getResource("property.yml".getFile());
ObjectMapper yamlMapper = new ObjectMapper(new YAMLFactory())
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
config = yamlMapper.readValue(configFile, MyPOJO.class);
答案 2 :(得分:-1)
我有一个类似的问题,解决方案是ObjectMapper的' setSerializationInclusion '属性可以用作:
public DataTable CallStoredProcedure(System.String procedureName, Dictionary<string, object> parameters)
{
var cmd = CreateStoredProcCallCommand(procedureName, true);
for (int i = 0; i < parameters.Count; i++)
{
var param = parameters.ElementAt(i);
if (param.Value.GetType() == typeof(DataTable))
AddTableValuedParameter(cmd, "@" + param.Key, 0, ParameterDirection.Input, param.Value);
else
AddParameter(cmd, "@" + param.Key, 2147483647, ParameterDirection.Input, param.Value);
}
var toReturn = new DataTable();
CreateAndSetupAdapter(cmd).Fill(toReturn);
return toReturn;
}
private DbCommand CreateStoredProcCallCommand(string storedProcedureToCall, bool openConnection)
{
var cmd = _factoryToUse.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = storedProcedureToCall;
return SetupCommand(cmd, openConnection);
}
private DbDataAdapter CreateAndSetupAdapter(DbCommand selectCommand)
{
var adapter = _factoryToUse.CreateDataAdapter();
adapter.SelectCommand = selectCommand;
return adapter;
}
private static void AddTableValuedParameter(DbCommand cmd, string parameterName, int length, ParameterDirection direction, object value)
{
SqlParameter param = new SqlParameter();
param.ParameterName = parameterName;
param.SqlDbType = SqlDbType.Structured;
param.Size = length;
param.Value = value;
param.Direction = direction;
cmd.Parameters.Add(param);
}
private static void AddParameter(DbCommand cmd, string parameterName, int length, ParameterDirection direction, object value)
{
var dummyParam = new EntityParameter() { Value = value };
var parameter = cmd.CreateParameter();
parameter.ParameterName = parameterName;
parameter.Direction = direction;
parameter.Size = length;
parameter.Value = value;
parameter.DbType = dummyParam.DbType;
cmd.Parameters.Add(parameter);
}
这只会将非空值写入输出YAML文件。