{"record":{"id":"19833cf623c93210","repo":"quarkusio/quarkus","slug":"invalid-character-value","errorCode":null,"errorMessage":"invalid Character value: ","messagePattern":"invalid Character value: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":400,"severity":"error","filePath":"independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/core/parameters/converters/CharacterParamConverter.java","lineNumber":9,"sourceCode":"package org.jboss.resteasy.reactive.server.core.parameters.converters;\n\npublic class CharacterParamConverter implements ParameterConverter {\n\n    @Override\n    public Object convert(Object parameter) {\n        String str = parameter.toString();\n        if (str.length() != 1) {\n            throw new IllegalArgumentException(\"invalid Character value: \" + str);\n        }\n        return Character.valueOf(str.charAt(0));\n    }\n\n    public static class Supplier implements ParameterConverterSupplier {\n\n        @Override\n        public String getClassName() {\n            return CharacterParamConverter.class.getName();\n        }\n\n        @Override\n        public CharacterParamConverter get() {\n            return new CharacterParamConverter();\n        }\n    }\n}\n","sourceCodeStart":1,"sourceCodeEnd":27,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/core/parameters/converters/CharacterParamConverter.java#L1-L27","documentation":"CharacterParamConverter.convert throws an IllegalArgumentException when a parameter mapped to java.lang.Character is not a single-character string. Identical to the primitive char converter but for the wrapper type. Malformed values surface as request failures (400).","triggerScenarios":"A @QueryParam/@PathParam/@HeaderParam/@RestForm Character parameter receives \"\", a multi-character string, or an unparsable value from the request.","commonSituations":"Empty query parameters; clients sending words where a single flag letter is expected; API changes where the parameter became longer; typos like \"ab\" for a mode flag.","solutions":["Ensure the client sends exactly one character, e.g. ?mode=a not ?mode=abc.","Change the parameter to String and perform explicit validation with a friendly error.","Trim or validate input client-side; reject empty strings before submission.","Use a proper enum or boolean instead of a single-character code for clarity."],"exampleFix":"// before\n// request: GET /items?grade=AB\npublic Response list(@QueryParam(\"grade\") Character grade) // throws\n// after\n// request: GET /items?grade=A\npublic Response list(@QueryParam(\"grade\") Character grade)","handlingStrategy":"validation","validationCode":"if (raw == null || raw.length() != 1) { throw new BadRequestException(\"'grade' must be exactly one character\"); }","typeGuard":"boolean isValidCharacter(String s) { return s != null && s.length() == 1; }","tryCatchPattern":"try { Character c = (Character) converter.convert(raw); } catch (IllegalArgumentException e) { return Response.status(400).entity(e.getMessage()).build(); }","preventionTips":["Send single-character values for Character params","Trim inputs before sending","Prefer enum/boolean over single-char codes","Test boundary values (empty, multi-char)"],"tags":["rest","parameter-conversion","validation"],"backgroundTag":"invalid-parameter-conversion","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}