{"record":{"id":"31c2d4e238acd715","repo":"quarkusio/quarkus","slug":"could-not-find-messagebodywriter-for-31c2d4","errorCode":null,"errorMessage":"Could not find MessageBodyWriter for ","messagePattern":"Could not find MessageBodyWriter for ","errorType":"http","errorClass":"InternalServerErrorException","httpStatus":500,"severity":"error","filePath":"independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/core/serialization/TypeDelegatingEntityWriter.java","lineNumber":34,"sourceCode":"\n    private final Map<Class<?>, EntityWriter> typeMap;\n\n    public TypeDelegatingEntityWriter(Map<Class<?>, EntityWriter> typeMap) {\n        this.typeMap = typeMap;\n    }\n\n    @Override\n    public void write(ResteasyReactiveRequestContext context, Object entity) throws IOException {\n        Class<?> c = entity.getClass();\n        while (c != null) {\n            EntityWriter delegate = typeMap.get(c);\n            if (delegate != null) {\n                delegate.write(context, entity);\n                return;\n            }\n            c = c.getSuperclass();\n        }\n        throw new InternalServerErrorException(\"Could not find MessageBodyWriter for \" + entity.getClass(),\n                Response.serverError().build());\n    }\n}\n","sourceCodeStart":16,"sourceCodeEnd":38,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/core/serialization/TypeDelegatingEntityWriter.java#L16-L38","documentation":"TypeDelegatingEntityWriter walks the entity's class hierarchy looking for a delegate MessageBodyWriter registered for that class (or a superclass). If no writer is registered anywhere up the hierarchy, an InternalServerErrorException (500) is thrown.","triggerScenarios":"Returning an entity whose class (and all superclasses) has no writer registered in the runtime type map — typically a plain POJO with no JSON serializer or no @RegisterForReflection-based registration when the declared return type was Object/dynamic.","commonSituations":"Missing quarkus-rest-jackson/quarkus-rest-jsonb dependency; entity class not registered for reflection in native mode; returning a third-party class the app never registered a writer for.","solutions":["Add the JSON serialization extension (quarkus-rest-jackson or quarkus-rest-jsonb).","Return the concrete type so build-time wiring selects a writer for it.","For native builds add @RegisterForReflection to the entity (and relevant superclasses).","Register a custom MessageBodyWriter or a serializer mapper for the third-party class."],"exampleFix":"// before\n@GET\npublic Object get() { return new ThirdPartyDto(); }\n// after\n@RegisterForReflection\n@GET @Produces(MediaType.APPLICATION_JSON)\npublic ThirdPartyDto get() { return new ThirdPartyDto(); }","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    return target.request().get(MyDto.class);\n} catch (InternalServerErrorException e) {\n    if (e.getMessage() != null && e.getMessage().contains(\"Could not find MessageBodyWriter\")) {\n        log.errorf(\"No writer registered in type hierarchy of %s\", MyDto.class);\n    }\n    throw e;\n}","preventionTips":["Add @RegisterForReflection on entity classes and their superclasses for native.","Prefer concrete return types so the type map is populated at build time.","Register custom writers for third-party entity classes."],"tags":["resteasy-reactive","serialization","messagebodywriter","http-500"],"backgroundTag":"no-messagebodywriter-for-entity","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"}