{"record":{"id":"2223dec18f677af7","repo":"quarkusio/quarkus","slug":"media-type-s-greater-than-1-s","errorCode":null,"errorMessage":"Media type %s greater than 1: %s","messagePattern":"Media type (.+?) greater than 1: (.+?)","errorType":"http","errorClass":"WebApplicationException","httpStatus":400,"severity":"error","filePath":"independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/util/MediaTypeHelper.java","lineNumber":41,"sourceCode":"    public static final MediaTypeComparator QS_COMPARATOR = new MediaTypeComparator(\"qs\");\n    private static final String MEDIA_TYPE_SUFFIX_DELIM = \"+\";\n\n    public static MediaType valueOf(String value) {\n        return MediaTypeHeaderDelegate.INSTANCE.fromString(value);\n    }\n\n    public static String toString(MediaType mediaType) {\n        return MediaTypeHeaderDelegate.INSTANCE.toString(mediaType);\n    }\n\n    private static float getQTypeWithParamInfo(MediaType type, String parameterName) {\n        if (type.getParameters() != null) {\n            String val = type.getParameters().get(parameterName);\n            try {\n                if (val != null) {\n                    float rtn = Float.parseFloat(val);\n                    if (rtn > 1.0F)\n                        throw new WebApplicationException(\n                                String.format(\"Media type %s greater than 1: %s\", parameterName, type),\n                                Response.Status.BAD_REQUEST);\n                    return rtn;\n                }\n            } catch (NumberFormatException e) {\n                throw new WebApplicationException(\n                        String.format(\"Media type %s value must be a float: %s\", parameterName, type),\n                        Response.Status.BAD_REQUEST);\n            }\n        }\n        return 2.0f;\n    }\n\n    public static float getQWithParamInfo(MediaType type) {\n        return getQTypeWithParamInfo(type, \"q\");\n    }\n\n    /**","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/util/MediaTypeHelper.java#L23-L59","documentation":"MediaTypeHelper.getQTypeWithParamInfo parses a quality (q) or similar numeric parameter from a media type and enforces the HTTP semantics that q values must lie in [0,1]. When the parameter is greater than 1.0 it throws a WebApplicationException with HTTP 400 BAD_REQUEST, because such a media type is contractually invalid.","triggerScenarios":"Sending an Accept or Content-Type header whose q (or qs) parameter exceeds 1, e.g. 'application/json;q=1.5' or 'text/html;q=2'. Invoked via getQWithParamInfo during content negotiation.","commonSituations":"Hand-written Accept headers with mistaken q values; clients copy-pasting percentage-style weights (e.g. 100 instead of 1.0); misconfigured HTTP clients or generated code emitting weights on a 0-100 scale.","solutions":["Correct the q parameter in the client's Accept/Content-Type header to a value between 0.0 and 1.0 (e.g. q=1 instead of q=1.5)","If weights came from a 0-100 scale, divide by 100 before setting the header","On the server, optionally catch WebApplicationException and return a friendlier 400 message naming the offending media type"],"exampleFix":"// before\nAccept: application/json;q=1.5\n// after\nAccept: application/json;q=1.0","handlingStrategy":"validation","validationCode":"Matcher m = java.util.regex.Pattern.compile(\";\\\\s*q\\\\s*=\\\\s*([0-9.]+)\").matcher(mediaType);\nif (m.find() && Float.parseFloat(m.group(1)) > 1.0f) throw new IllegalArgumentException(\"q must be <= 1.0\");","typeGuard":null,"tryCatchPattern":"try { /* negotiation call */ } catch (WebApplicationException e) { if (e.getResponse().getStatus() == 400) { /* fix/rewrite header, retry with default q */ } else throw e; }","preventionTips":["Clamp q values to [0,1] when generating Accept headers programmatically","Never use percentage-scale weights in q parameters","Add client-side tests for emitted Accept headers","Document q semantics for teams writing custom clients"],"tags":["http","media-type","content-negotiation","bad-request"],"backgroundTag":"invalid-q-value","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}