このメソッドは、Java 8のタイプ仕様<従業員>の結果を返す必要があります

ON:

それ以外の場合はラムダ式を使用して使用して戻す方法は?

public static Specification<Employee> textInAllColumns(Object value) {
    if (value instanceof String) {
        return (root, query, builder) -> builder
            .or(root.getModel().getDeclaredSingularAttributes().stream()
                .filter(a -> {
                    return a.getJavaType()
                        .getSimpleName()
                        .equalsIgnoreCase("String") ? true : false;
                })
                .map(a -> builder.like(root.get(a.getName()), getString((String) value)))
                .toArray(Predicate[]::new));
    } else if (value instanceof Integer) {
        return (root, query, builder) -> builder
            .or(root.getModel().getDeclaredSingularAttributes().stream()
                .filter(a -> {
                    return a.getJavaType()
                        .getSimpleName()
                        .equalsIgnoreCase("Integer") ? true : false;
                })
                .map(a -> builder.equal(root.get(a.getName()), value))
                .toArray(Predicate[]::new));
    }
}

私は、エラーの下に取得しています:

このメソッドは、型指定の結果を返す必要があります

@GetMapping("/findEmployees")
public ResponseEntity<List<Employee>> findEmployees(@RequestParam Object searchValue) {
    List<Employee> employees = employeeService.searchGlobally(searchValue);
    return new ResponseEntity<>(employees, HttpStatus.OK);
}
buræquete:

あなたはこのような何かを行うことができます。

public static Specification<Employee> textInAllColumns(Object value) {
    return (root, query, builder) -> builder.or(root.getModel().getDeclaredSingularAttributes().stream()
            .filter(attr -> attr.getJavaType().equals(value.getClass()))
            .map(attr -> map(value, root, builder, attr))
            .toArray(Predicate[]::new));
}

private static Object map(Object value, Root root, CriteriaBuilder builder, SingularAttribute a) {
    switch (value.getClass().getSimpleName()) {
        case "String":
            return builder.like(root.get(a.getName()), getString((String) value));
        case "Integer":
            return builder.equal(root.get(a.getName()), value);
        case "Date":
            return //date mapping
        default:
            return //default;
    }
}

隠れif内のロジックmap()方法を...


あなたのエンドポイントへの更新。

findEmployees(@RequestParam String searchValue) { }

すべての入力は、タイプとして受け入れられることができるのでString

Object finalValue = searchValue;
try {
    finalValue = Integer.parseInt(searchValue);
} catch (Exception e) {
    // ignore
}
try {
    finalValue = parseDateFromStr(searchValue);
} catch (Exception e) {
    // ignore
}
// use finalValue as input to your logic, it will contain correct type

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=234879&siteId=1