How to set status code when returning an entity?

33 views
Skip to first unread message

Aditya Prasad

unread,
Oct 19, 2020, 1:29:32 PM10/19/20
to dropwizard-user
Hi there,

I have a resource file that looks like this:

@Context
private HttpServletResponse httpServletResponse;
...
public User getUser() { 
  // stuff
  return user;
}

I want to set status code 202. Unfortunately, calling httpServletResponse.setStatusCode() doesn't work, because it gets overridden. One suggestion I've heard is to call httpServletResponse.getOutputStream().close(), but that prevents the object from being written. Another suggestion I've heard is httpServletResponse.getOutputStream().flushBuffer(), but in that case it looks like the content type is being set wrong. My client reports:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/octet-stream, type=foo.User, genericType=foo.User

Is there any way to set the status and return an object without serializing it myself? My code is auto-generated in such a way that I'm forced to return User (and not Response).

Thanks,
Aditya

Douglas Patriarche

unread,
Oct 19, 2020, 3:31:57 PM10/19/20
to dropwizard-user
Hi Aditya,

They way I accomplish what you're trying to do is to return a Response object, like this:

        return Response.ok(file, mimeType)
                       .header(HttpHeaders.CONTENT_LENGTH, file.length())
                       .header(HttpHeaders.CONTENT_DISPOSITION,
                           "attachment; filename=" + file.getName())
                       .build();

If you wanted to respond with something other than a 200 then you could do so with:

        return Response.status(202).entity(file).type(mimeType).build();

I hope this helps.

Aditya Prasad

unread,
Oct 19, 2020, 4:01:57 PM10/19/20
to dropwiz...@googlegroups.com
Thanks Douglas. As I mentioned, it is not possible for me to return a Response. So it sounds like setting the status is impossible?

--
You received this message because you are subscribed to the Google Groups "dropwizard-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dropwizard-us...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dropwizard-user/f2e4dc63-fd95-40fb-b437-f8483870c332n%40googlegroups.com.

Jochen Schalanda

unread,
Oct 19, 2020, 4:51:32 PM10/19/20
to dropwizard-user
Hi Aditya,

what's the reason you cannot use JAX-RS in your application and are trying to write to HttpServletResponse directly?

Maybe there's another way.

Cheers,
Jochen

--
You received this message because you are subscribed to the Google Groups "dropwizard-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dropwizard-us...@googlegroups.com.

Aditya Prasad

unread,
Oct 19, 2020, 5:10:13 PM10/19/20
to dropwiz...@googlegroups.com
Hi Jochen,

As far as I understand, we are using JAX-RS. I'm only trying to write the status code directly because I don't know how else to set it. We've got an OpenAPI spec that promises to return a 202, and some auto-generated code that forces me to return a User object instead of a bare Response.

Cheers,
A

Reply all
Reply to author
Forward
0 new messages