我有这个通用功能
private static T PostNew<T>() where T : IHttpModel, new()
{
var t = HttpModelsFactory.Create<T>();
var requestT = new RestRequest("/households", Method.POST);
requestT.AddParameter("application/json", t.ToJson(), ParameterType.RequestBody);
return t;
}
它需要创建和发送一个T类型的对象。但是,根据类型是什么,该对象需要具有特定的属性。
class HttpModelsFactory
{
public static T Create<T>() where T : IHttpModel, new()
{
Type typeofT = typeof(T);
if (typeofT.Equals(typeof(Household)))
{
return CreateHousehold() as T;
}
}
public static Household CreateHousehold()
{
return new Household
{
Name = Randoms.RandomString()
};
}
}
这将不仅仅包括家庭课程。但是,它当前给我这个错误:“类型参数'T'不能与'as'运算符一起使用,因为它既没有类类型约束也没有'类'约束。”我该如何重构代码以使其正常工作?或者有更好的解决方案?
答案 0 :(得分:3)
添加@RestControllerAdvice
public class CustomValidationExceptionHandler
{
@ExceptionHandler
public ResponseEntity toResponse(CustomValidationException ex)
{
ErrorMessage errorMessage=new
ErrorMessage(400,ex.getMessage,"www.stackoverflow.com");
return new ResponseEntity<ErrorMessage>(errorMessage,HttpStatus.BAD_REQUES);
}
}
约束,您还可以委托一个对象对创建的对象应用任何操作
class
但是现在这意味着它需要冒泡到使用位置。
class HttpModelsFactory {
public static T Create<T>(Action<T> configure = null)
where T : IHttpModel, class, new() {
T result = new T();
if(configure != null) configure(result);
return result;
}
}
调用private static T PostNew<T>(Action<T> configure = null)
where T : IHttpModel, class, new() {
var model = HttpModelsFactory.Create<T>(configure);
var request = new RestRequest("/households", Method.POST);
request.AddParameter("application/json", model.ToJson(), ParameterType.RequestBody);
//...
return model;
}
可能看起来像
PostNew