{"record":{"id":"87cdaa12c623563b","repo":"jd-opensource/joyagent-jdgenie","slug":"error-87cdaa","errorCode":null,"errorMessage":"不支持的操作类型:","messagePattern":"不支持的操作类型:","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"genie-backend/src/main/java/com/jd/genie/data/model/ComparisonType.java","lineNumber":63,"sourceCode":"\n    ComparisonType(String comparison, String comparisonName,String relationalAlgebra,String relationalAlgebraSql) {\n        this.comparison = comparison;\n        this.comparisonName = comparisonName;\n        this.relationalAlgebra = relationalAlgebra;\n        this.relationalAlgebraSql = relationalAlgebraSql;\n    }\n\n\n    public static ComparisonType of(String var0) {\n        ComparisonType[] var1 = ComparisonType.class.getEnumConstants();\n\n        for (ComparisonType var4 : var1) {\n            if (StringUtils.equalsIgnoreCase(var0, var4.name())) {\n                return var4;\n            }\n        }\n\n        throw new IllegalArgumentException(\"不支持的操作类型:\" + var0);\n    }\n}\n","sourceCodeStart":45,"sourceCodeEnd":66,"githubUrl":"https://github.com/jd-opensource/joyagent-jdgenie/blob/2417e0b8b636d941ad5fb14c59b20dddfef5375d/genie-backend/src/main/java/com/jd/genie/data/model/ComparisonType.java#L45-L66","documentation":"ComparisonType.of(String) maps a string to the ComparisonType enum by case-insensitive name match; if no enum constant matches, it throws IllegalArgumentException with '不支持的操作类型:' plus the input. It is a strict enum-parse guard against unknown operator names.","triggerScenarios":"Calling ComparisonType.of with any string that is not exactly (ignoring case) a ComparisonType constant name — e.g. 'great_than', 'gt', 'eq' vs expected names like 'EQUAL', 'GREATER_THAN'.","commonSituations":"User-supplied filter/operator from a request payload not matching backend enum names; frontend sends Chinese or shorthand operators; older clients using renamed operators after a version change.","solutions":["Check the ComparisonType enum constants and send an exact (case-insensitive) name, e.g. EQUAL, NOT_EQUAL, GREATER_THAN","Validate/normalize the operator string client-side against the enum names before calling of()","Wrap of() in try-catch to return a default or a clear 400 error naming valid options","If a new operator is genuinely needed, add a constant to ComparisonType and redeploy"],"exampleFix":"// before\nComparisonType type = ComparisonType.of(request.getOperator()); // \"gt\"\n// after\nString op = request.getOperator().trim().toUpperCase().replace(\"GT\", \"GREATER_THAN\");\nComparisonType type;\ntry {\n    type = ComparisonType.of(op);\n} catch (IllegalArgumentException e) {\n    throw new IllegalArgumentException(\"operator must be one of \" + Arrays.toString(ComparisonType.values()));\n}","handlingStrategy":"validation","validationCode":"Set<String> valid = Arrays.stream(ComparisonType.values())\n    .map(Enum::name).collect(Collectors.toSet());\nif (operator == null || !valid.contains(operator.trim().toUpperCase())) {\n    throw new IllegalArgumentException(\"Unknown operator: \" + operator + \", valid: \" + valid);\n}\nComparisonType type = ComparisonType.of(operator.trim());","typeGuard":"Optional<ComparisonType> tryParse(String s) {\n    return s == null ? Optional.empty()\n        : Arrays.stream(ComparisonType.values())\n            .filter(t -> t.name().equalsIgnoreCase(s.trim()))\n            .findFirst();\n}","tryCatchPattern":"try {\n    ComparisonType type = ComparisonType.of(operator);\n} catch (IllegalArgumentException e) {\n    return ResponseEntity.badRequest().body(\"Unknown operator; valid values: \"\n        + Arrays.toString(ComparisonType.values()));\n}","preventionTips":["Expose the enum's valid names via an API/docs endpoint for clients","Normalize operator strings (trim, upper-case) before parsing","Validate user-supplied operators at the API boundary before reaching of()","Write a round-trip test parsing every enum constant name"],"tags":["enum","illegal-argument","invalid-input","operator"],"backgroundTag":"invalid-enum-value","analyzedSha":"2417e0b8b636d941ad5fb14c59b20dddfef5375d","analyzedAt":"2026-09-08T11:28:19.414Z","contentChangedAt":"2026-09-08T11:28:19.414Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}