Annotation Interface ClientFormParam


Used to specify a form parameter that should be sent with the outbound request. When this annotation is placed at the interface level of a REST client interface, the specified form parameter will be sent on each request for all methods in the interface. When this annotation is placed on a method, the parameter will be sent only for that method. If the same form parameter is specified in an annotation for both the type and the method, only the parameter value specified in the annotation on the method will be sent.

The value of the parameter to send can be specified explicitly by using the value attribute. The value can also be computed via a default method on the client interface or a public static method on a different class. The compute method must return a String or String[] (indicating a multivalued header) value. This method must be specified in the value attribute but wrapped in curly-braces. The compute method's signature must either contain no arguments or a single String argument. The String argument is the name of the form parameter.

Here is an example that explicitly defines a form parameter value and computes a value:

 public interface MyClient {

    static AtomicInteger counter = new AtomicInteger(1);

    default String determineFormParamValue(String name) {
        if ("SomeParam".equals(name)) {
            return "InvokedCount " + counter.getAndIncrement();
        }
        throw new UnsupportedOperationException("unknown name");
    }

    @ClientFormParam(name="SomeName", value="ExplicitlyDefinedValue")
    @GET
    Response useExplicitFormParamValue();

    @ClientFormParam(name="SomeName", value="{determineFormParamValue}")
    @DELETE
    Response useComputedFormParamValue();
 }
 
The implementation should fail to deploy a client interface if the annotation contains a @ClientFormParam annotation with a value attribute that references a method that does not exist, or contains an invalid signature.

The required attribute will determine what action the implementation should take if the method specified in the value attribute throws an exception. If the attribute is true (default), then the implementation will abort the request and will throw the exception back to the caller. If the required attribute is set to false, then the implementation will not send this form parameter if the method throws an exception.

Note that if an interface method contains an argument annotated with @FormParam, that argument will take priority over anything specified in a @ClientFormParam annotation.

  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
     
     
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    boolean
     
  • Element Details

    • name

      String name
      Returns:
      the name of the form param.
    • value

      String[] value
      Returns:
      the value(s) of the param - or the method to invoke to get the value (surrounded by curly braces).
    • required

      boolean required
      Returns:
      whether to abort the request if the method to compute the form parameter value throws an exception (true; default) or just skip this form parameter (false)
      Default:
      true