When creating a resource (POST /items) i was a bit annoyed by the fact that my implementation has a dependency on jax-rs classes: it uses response builder to build a 201 response. This also pollutes my service interface, since the return value has to be a Response.
To fix this, i introduced an annotation which gets handled by the interceptor code below: @RespondWithStatus(status=HttpServletResponse.SC_CREATED,name="Location",value="/items/{return}") I'm using this interceptor-construction to hack the response and turn it into a 201 with a Location header (leaving the entity like it is). Now my service implementation class or interface has no dependencies on jax-rs (it just returns a String, which will be used to replace the {return} placeholder. I'ld like to get some feedback on this trick. Is there anything "built-in" that i could have used? @Provider @ServerInterceptor public class RespondWithStatusAndHeaderInterceptor implements PostProcessInterceptor { @Context HttpServletRequest req; public void postProcess(ServerResponse arg0) { for (Annotation a : arg0.getAnnotations()) { if (a.annotationType().equals(RespondWithStatus.class)){ RespondWithStatus x = (RespondWithStatus) a; String template = x.value(); String rv = arg0.getEntity().toString(); int u = template.indexOf("{return}"); int y = template.indexOf('?'); rv = (u < y || y == -1) ? org.jboss.resteasy.util.Encode.encodePath(rv) : org.jboss.resteasy.util.Encode.encodeQueryParam(rv); String p = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+req.getContextPath()+req.getServletPath(); String rep = template.replace("{return}",rv); if (!"".equals(x.name())) { arg0.getMetadata().add(x.name(), p+rep); } arg0.setStatus(x.status()); } } } @Retention(RetentionPolicy.RUNTIME) public static @interface RespondWithStatus { int status(); String name() default ""; String value() default ""; } } ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Resteasy-users mailing list Resteasy-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/resteasy-users