我尝试做的是创建一个接受类型swagger: "2.0"
info:
description: "A simple Google Cloud Endpoints API example."
title: "Endpoints Example"
version: "1.0.0"
host: "echo-api.endpoints.projectid.cloud.goog"
x-google-endpoints:
- name: "echo-api.endpoints.projectid.cloud.goog"
target: "SOME IP"
# [END swagger]
basePath: "/"
consumes:
- "application/json"
produces:
- "application/json"
schemes:
- "http"
paths:
"/list":
get:
description: "list"
operationId: "Project.get"
produces:
- "application/json"
responses:
200:
description: "lists"
schema:
$ref: "#/definitions/Project"
parameters:
- description: "Project Name"
in: body
name: project_id
required: true
schema:
$ref: "#/definitions/Res"
security:
- google_jwt_client-1: []
definitions:
Res:
properties:
apierrmsg:
type: "string"
apiresults:
type: "Array"
definitions:
Project:
properties:
project_id:
type: "string"
securityDefinitions:
google_jwt_client-1:
authorizationUrl: ""
flow: "implicit"
type: "oauth2"
x-google-issuer: "some@projectid.iam.gserviceaccount.com"
x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/some@projectid.iam.gserviceaccount.com"
列表的通用方法以及一些搜索选项(即排序方向和排序字段),然后根据给定列表进行排序关于搜索选项。
我认为问题可能与我传递给OrderBy方法的Func委托的通用返回类型有关,但我并不完全确定是诚实的。此刻相当难倒。这就是我到目前为止所拥有的:
T
没有抛出异常,但没有发生排序。原始列表按照传递的顺序返回。非常感谢任何帮助。
修改
我很抱歉这里明显缺乏实际问题。老实说,我在发帖时没有意识到这一点。
感谢您对null运算符的建议。这给了我一个印象,即代码应该正常工作,当它真的应该抛出异常时。这使得调试非常令人沮丧,因为在执行代码时似乎没有任何问题。
正如StriplingWarrior在回答中提到的那样,我在lambda表达式中使用public static class TableGenerationHelper
{
public static IList<T> CreateReportObject<T>(IList<T> items, ISearchOptions searchOptions) where T : new()
{
Type sortFieldType = typeof(T).GetProperty(searchOptions.SortField)?.GetType();
MethodInfo createMethod = typeof(TableGenerationHelper).GetMethod("CreateSortedList");
MethodInfo methodRef = createMethod?.MakeGenericMethod(typeof(T), sortFieldType);
Object[] args = { items, searchOptions.SortField, searchOptions.SortDirection };
results = (IList<T>)methodRef?.Invoke(null, args);
return results;
}
public static IList<T> CreateSortedList<T, TH>(IList<T> items, String sortField, String sortDirection) where T : new()
{
Type type = typeof(T);
PropertyInfo propInfo = type.GetProperty(sortField);
Func<T, TH> orderByFunc = x => (TH)propInfo?.PropertyType.GetRuntimeProperty(sortField)?.GetValue(x, null);
return LoadListOrderedByDirection(items, orderByFunc, sortDirection);
}
public static IList<T> LoadListOrderedByDirection<T, TH>(IList<T> items, Func<T, TH> keySelector, String sortDirection)
{
switch (sortDirection)
{
case "ASC":
return items.OrderBy(keySelector).ToList();
case "DESC":
return items.OrderByDescending(keySelector).ToList();
default:
return items;
}
}
}
而不是RuntimePropertyInfo
。
下次发布时,我一定会有一个实际的问题。
答案 0 :(得分:0)
你正在吃一堆空值,这会让你错过一些你可能会看到异常的错误,而且Eric Lippert是正确的,你真的需要学会逐步调试代码来调试它。
你这里有几个错误。
@BeforeClass
public static void setup() {
System.setProperty("spring.kafka.bootstrap-servers", kafkaEmbedded.getBrokersAsString());
}
上使用PropertyType
,它为您提供属性返回的类型,而不是声明属性的对象类型。然后你要求输入具有给定名称的属性的(这对我来说没有多大意义,因为你已经拥有了首先调用GetProperty的PropertyInfo。)propInfo
的结果上使用GetType()
,它将始终返回运行时属性信息类的类型,而不是属性的实际类型。您想改用GetProperty
。这似乎工作正常:
PropertyType