Solving “Could not find MessageBodyWriter for response object of type”

This article discusses the steps to solve the error “org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type” that you can have at runtime in a REST application.

The Problem

This error message is indicating that the RESTEasy framework (which is a JAX-RS implementation for Java) is unable to find a suitable “MessageBodyWriter” for a JAX-RS response.

"Failed executing GET /api/nocache: org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: com.mastertheboss.jaxrs.model.Customer of media type: application/octet-stream"

Specifically, this error message states that the response object is of type “com.mastertheboss.jaxrs.model.Customer” and the media type of the response is “application/octet-stream”. The “MessageBodyWriter” is a component of the RESTEasy framework. Its job is to convert the response object into a format that can be sent back to the client.

There are a few possible reasons for this error:

  • The class “com.mastertheboss.jaxrs.model.Customer” may not have a suitable “MessageBodyWriter” implementation registered with the RESTEasy framework.
  • The available “MessageBodyWriter” implementations may not support the media type “application/octet-stream”
  • The class “com.mastertheboss.jaxrs.model.Customer” may not have the correct annotations for the framework to find the correct message body writer.

The Solution

If your REST Service is returning JSON data, the simplest solution is to specify that the Endpoint (Class or method) produces/consumes a JSON Media Type. For example:

@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class SimpleRESTService {
}

Alternatively, you can also set the default Media type in the Java System property “resteasy.media.type“. To set it at application level, you can add it to the Map of Properties of your JAX-RS Application Class. For example:

@ApplicationPath("/rest")
public class JaxRsActivator extends Application {
    @Override
    public Map<String, Object> getProperties() {
        Map<String, Object> properties = new HashMap<>();
        properties.put("resteasy.media.type", "application/json");
        return properties;
    }
}

On the other hand, if your application returns an XML media type, you can annotate the “com.mastertheboss.jaxrs.model.Customer” class with the @XmlRootElement. For example:

@XmlRootElement
public class Customer {
. . . .
}

Conclusion

This article provided a simple solution to work around the issue “org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type” which happens if you try to return a Media Type that is not supported for an Entity.

Found the article helpful? if so please follow us on Socials