dev@jersey.java.net

Re: [Jersey] Re: Improved parameter handling suggestion

From: Paul Sandoz <Paul.Sandoz_at_oracle.com>
Date: Tue, 7 Dec 2010 10:16:26 +0100

Hi Adam.

This area is a little inflexible. The only way i can see how to
currently do this is to define your own annotation say @NullOnEmpty
then define a general wrapping StringReaderProvider that operates on
that annotation:

@Provider
public class NullOnEmptyStringReaderProvider
    implements StringReaderProvider<String> {

    @Context StringReaderWorkers ws;

    @Override
    public StringReader<String> getStringReader(
        Class<?> type, Type genericType, Annotation[] annotations) {
        if (/ NullOnEmpty is present /) {
          final StringReader sr = ws.getStringReader(type,
genericType, new Annotation[0]);
          return new StringReader<String>() {

              @Override
              public String fromString(String value) {
                  if (value.isEmpty()) {
                      return null;
                  } else {
                      return sr.fromString(value);
                  }
              }
          };
        } else {
          return null;
        }
    }
}

Paul.

On Dec 6, 2010, at 10:31 PM, Adam Walczak wrote:

> Is the any way in Jersey to make it treat empty strings in parameter
> injection as null's ?
>
> I tried something hacky like:
>
> @Provider
> public class StringStringReaderProvider
> implements StringReaderProvider<String> {
>
> @Override
> public StringReader<String> getStringReader(
> Class<?> type, Type genericType, Annotation[] annotations) {
> return new StringReader<String>() {
>
> @Override
> public String fromString(String value) {
> if(value == null) {
> return null;
> } else if(value.isEmpty()) {
> return null;
> } else {
> return value;
> }
> }
> };
> }
>
> }
>
> but it didn't work :o)
>
> --
> Adam Walczak
> www.adamwalczak.info
> +48 604 188 992