killbill-aplcache

jaxrs: Tweak query params for tag and custom field apis in a non

3/20/2018 10:45:53 PM

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
index 8cb05cd..b0ba0a8 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
@@ -138,13 +138,10 @@ import com.google.common.collect.Iterables;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.Authorization;
-import io.swagger.annotations.BasicAuthDefinition;
 
 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
 
@@ -1235,7 +1232,7 @@ public class AccountResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove custom fields from account")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid account id supplied")})
     public Response deleteCustomFields(@PathParam(ID_PARAM_NAME) final UUID accountId,
-                                       @QueryParam(QUERY_CUSTOM_FIELDS) final String customFieldList,
+                                       @QueryParam(QUERY_CUSTOM_FIELD) final List<String> customFieldList,
                                        @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                        @HeaderParam(HDR_REASON) final String reason,
                                        @HeaderParam(HDR_COMMENT) final String comment,
@@ -1288,7 +1285,7 @@ public class AccountResource extends JaxRsResourceBase {
     @ApiOperation(value = "Add tags to account", response = TagJson.class, responseContainer = "List")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid account id supplied")})
     public Response createTags(@PathParam(ID_PARAM_NAME) final UUID accountId,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
@@ -1306,7 +1303,7 @@ public class AccountResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove tags from account")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid account id supplied or account does not have a default payment method (AUTO_PAY_OFF tag only)")})
     public Response deleteTags(@PathParam(ID_PARAM_NAME) final UUID accountId,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
index dd56679..5ced172 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
@@ -350,7 +350,7 @@ public class BundleResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove custom fields from bundle")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid bundle id supplied")})
     public Response deleteCustomFields(@PathParam(ID_PARAM_NAME) final UUID bundleId,
-                                       @QueryParam(QUERY_CUSTOM_FIELDS) final String customFieldList,
+                                       @QueryParam(QUERY_CUSTOM_FIELD) final List<String> customFieldList,
                                        @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                        @HeaderParam(HDR_REASON) final String reason,
                                        @HeaderParam(HDR_COMMENT) final String comment,
@@ -441,7 +441,7 @@ public class BundleResource extends JaxRsResourceBase {
     @ApiOperation(value = "Add tags to bundle", response = TagJson.class, responseContainer = "List")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid bundle id supplied")})
     public Response createTags(@PathParam(ID_PARAM_NAME) final UUID bundleId,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
@@ -459,7 +459,7 @@ public class BundleResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove tags from bundle")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid bundle id supplied")})
     public Response deleteTags(@PathParam(ID_PARAM_NAME) final UUID bundleId,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceItemResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceItemResource.java
index f8a9c45..5035ad1 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceItemResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceItemResource.java
@@ -134,7 +134,7 @@ public class InvoiceItemResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove custom fields from invoice item")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid invoice item id supplied")})
     public Response deleteCustomFields(@PathParam(ID_PARAM_NAME) final UUID id,
-                                       @QueryParam(QUERY_CUSTOM_FIELDS) final String customFieldList,
+                                       @QueryParam(QUERY_CUSTOM_FIELD) final List<String> customFieldList,
                                        @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                        @HeaderParam(HDR_REASON) final String reason,
                                        @HeaderParam(HDR_COMMENT) final String comment,
@@ -169,7 +169,7 @@ public class InvoiceItemResource extends JaxRsResourceBase {
     @ApiOperation(value = "Add tags to invoice item", response = TagJson.class, responseContainer = "List")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid invoice item id supplied")})
     public Response createTags(@PathParam(ID_PARAM_NAME) final UUID id,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
@@ -187,7 +187,7 @@ public class InvoiceItemResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove tags from invoice item")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid invoice item id supplied")})
     public Response deleteTags(@PathParam(ID_PARAM_NAME) final UUID id,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
index 2d138cf..b270235 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
@@ -77,7 +77,6 @@ import org.killbill.clock.Clock;
 import org.killbill.commons.metrics.TimedResource;
 
 import com.google.common.base.Predicate;
-import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.inject.Inject;
@@ -369,7 +368,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove custom fields from payment")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid payment id supplied")})
     public Response deleteCustomFields(@PathParam(ID_PARAM_NAME) final UUID id,
-                                       @QueryParam(QUERY_CUSTOM_FIELDS) final String customFieldList,
+                                       @QueryParam(QUERY_CUSTOM_FIELD) final List<String> customFieldList,
                                        @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                        @HeaderParam(HDR_REASON) final String reason,
                                        @HeaderParam(HDR_COMMENT) final String comment,
@@ -404,7 +403,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
     @ApiOperation(value = "Add tags to payment", response = TagJson.class, responseContainer = "List")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid payment id supplied")})
     public Response createTags(@PathParam(ID_PARAM_NAME) final UUID id,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
@@ -422,7 +421,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove tags from payment")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid payment id supplied")})
     public Response deleteTags(@PathParam(ID_PARAM_NAME) final UUID id,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
index a045bf1..ce872e5 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
@@ -60,9 +60,7 @@ import org.killbill.billing.account.api.AccountApiException;
 import org.killbill.billing.account.api.AccountUserApi;
 import org.killbill.billing.catalog.DefaultPlanPhasePriceOverride;
 import org.killbill.billing.catalog.api.BillingActionPolicy;
-import org.killbill.billing.catalog.api.BillingPeriod;
 import org.killbill.billing.catalog.api.Currency;
-import org.killbill.billing.catalog.api.PhaseType;
 import org.killbill.billing.catalog.api.PlanPhasePriceOverride;
 import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
 import org.killbill.billing.catalog.api.ProductCategory;
@@ -926,7 +924,7 @@ public class InvoiceResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove custom fields from invoice")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid invoice id supplied")})
     public Response deleteCustomFields(@PathParam(ID_PARAM_NAME) final UUID id,
-                                       @QueryParam(QUERY_CUSTOM_FIELDS) final String customFieldList,
+                                       @QueryParam(QUERY_CUSTOM_FIELD) final List<String> customFieldList,
                                        @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                        @HeaderParam(HDR_REASON) final String reason,
                                        @HeaderParam(HDR_COMMENT) final String comment,
@@ -959,7 +957,7 @@ public class InvoiceResource extends JaxRsResourceBase {
     @ApiOperation(value = "Add tags to invoice", response = TagJson.class, responseContainer = "List")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid invoice id supplied")})
     public Response createTags(@PathParam(ID_PARAM_NAME) final UUID id,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
@@ -977,7 +975,7 @@ public class InvoiceResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove tags from invoice")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid invoice id supplied")})
     public Response deleteTags(@PathParam(ID_PARAM_NAME) final UUID id,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
index 3e124cc..9b2b9cb 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
@@ -121,8 +121,8 @@ public interface JaxrsResource {
     public static final String QUERY_TENANT_USE_GLOBAL_DEFAULT = "useGlobalDefault";
     public static final String QUERY_TAGS_INCLUDED_DELETED = "includedDeleted";
 
-    public static final String QUERY_TAGS = "tagList";
-    public static final String QUERY_CUSTOM_FIELDS = "customFieldList";
+    public static final String QUERY_TAG = "tag";
+    public static final String QUERY_CUSTOM_FIELD = "customField";
 
     public static final String QUERY_OBJECT_TYPE = "objectType";
 
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
index 390c8a1..a78fffc 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
@@ -206,7 +206,7 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
     }
 
     protected Response createTags(final UUID id,
-                                  final String tagList,
+                                  final List<String> tagList,
                                   final UriInfo uriInfo,
                                   final CallContext context,
                                   final HttpServletRequest request) throws TagApiException {
@@ -216,9 +216,8 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
         return uriBuilder.buildResponse(uriInfo, this.getClass(), "getTags", id, request);
     }
 
-    protected Collection<UUID> getTagDefinitionUUIDs(final String tagList) {
-        final String[] tagParts = tagList.split(",\\s*");
-        return Collections2.transform(ImmutableList.copyOf(tagParts), new Function<String, UUID>() {
+    protected Collection<UUID> getTagDefinitionUUIDs(final List<String> tagList) {
+        return Collections2.transform(tagList, new Function<String, UUID>() {
             @Override
             public UUID apply(final String input) {
                 return UUID.fromString(input);
@@ -227,7 +226,7 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
     }
 
     protected Response deleteTags(final UUID id,
-                                  final String tagList,
+                                  final List<String> tagList,
                                   final CallContext context) throws TagApiException {
         final Collection<UUID> input = getTagDefinitionUUIDs(tagList);
         tagUserApi.removeTags(id, getObjectType(), input, context);
@@ -289,22 +288,20 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
      * @throws CustomFieldApiException
      */
     protected Response deleteCustomFields(final UUID id,
-                                          @Nullable final String customFieldList,
+                                          final List<String> customFieldList,
                                           final CallContext context) throws CustomFieldApiException {
 
         // Retrieve all the custom fields for the object
         final List<CustomField> fields = customFieldUserApi.getCustomFieldsForObject(id, getObjectType(), context);
 
-        final String[] requestedIds = customFieldList != null ? customFieldList.split("\\s*,\\s*") : null;
-
         // Filter the proposed list to only keep the one that exist and indeed match our object
         final Iterable inputIterable = Iterables.filter(fields, new Predicate<CustomField>() {
             @Override
             public boolean apply(final CustomField input) {
-                if (customFieldList == null) {
+                if (customFieldList.isEmpty()) {
                     return true;
                 }
-                for (final String cur : requestedIds) {
+                for (final String cur : customFieldList) {
                     final UUID curId = UUID.fromString(cur);
                     if (input.getId().equals(curId)) {
                         return true;
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/KillBillApiDefinition.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/KillBillApiDefinition.java
index b7b9530..af10cd1 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/KillBillApiDefinition.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/KillBillApiDefinition.java
@@ -121,8 +121,11 @@ public class KillBillApiDefinition implements ReaderListener {
                                qp.getName().equals(JaxrsResource.QUERY_END_DATE)) {
                         qp.setType("string");
                         qp.setFormat("date");
+                    } else if (qp.getName().equals(JaxrsResource.QUERY_CUSTOM_FIELD) ||
+                               qp.getName().equals(JaxrsResource.QUERY_TAG)) {
+                        // Keep the name singular for the ay se wend info (tag=foo$tag-bar, ...), but make it plural (to be nicer) for auto-generated code List<String> tags
+                        qp.setName(String.format("%ss",qp.getName()));
                     }
-
                 }
             }
         }
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
index 78384af..027fb11 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
@@ -338,7 +338,7 @@ public class PaymentMethodResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove custom fields from payment method")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid payment method id supplied")})
     public Response deleteCustomFields(@PathParam("paymentMethodId") final UUID paymentMethodId,
-                                       @QueryParam(QUERY_CUSTOM_FIELDS) final String customFieldList,
+                                       @QueryParam(QUERY_CUSTOM_FIELD) final List<String> customFieldList,
                                        @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                        @HeaderParam(HDR_REASON) final String reason,
                                        @HeaderParam(HDR_COMMENT) final String comment,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
index 4962a11..81013c9 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
@@ -837,7 +837,7 @@ public class PaymentResource extends ComboPaymentResource {
     @ApiOperation(value = "Remove custom fields from payment payment")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid payment id supplied")})
     public Response deleteCustomFields(@PathParam(ID_PARAM_NAME) final UUID id,
-                                       @QueryParam(QUERY_CUSTOM_FIELDS) final String customFieldList,
+                                       @QueryParam(QUERY_CUSTOM_FIELD) final List<String> customFieldList,
                                        @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                        @HeaderParam(HDR_REASON) final String reason,
                                        @HeaderParam(HDR_COMMENT) final String comment,
@@ -870,7 +870,7 @@ public class PaymentResource extends ComboPaymentResource {
     @ApiOperation(value = "Add tags to payment payment", response = TagJson.class, responseContainer = "List")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid payment id supplied")})
     public Response createTags(@PathParam(ID_PARAM_NAME) final UUID paymentId,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
@@ -888,7 +888,7 @@ public class PaymentResource extends ComboPaymentResource {
     @ApiOperation(value = "Remove tags from payment payment")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid payment id supplied")})
     public Response deleteTags(@PathParam(ID_PARAM_NAME) final UUID paymentId,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
index 7d70f40..3bdbde8 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
@@ -908,7 +908,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove custom fields from subscription")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid subscription id supplied")})
     public Response deleteCustomFields(@PathParam(ID_PARAM_NAME) final UUID id,
-                                       @QueryParam(QUERY_CUSTOM_FIELDS) final String customFieldList,
+                                       @QueryParam(QUERY_CUSTOM_FIELD) final List<String> customFieldList,
                                        @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                        @HeaderParam(HDR_REASON) final String reason,
                                        @HeaderParam(HDR_COMMENT) final String comment,
@@ -940,7 +940,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
     @ApiOperation(value = "Add tags to subscription", response = TagJson.class, responseContainer = "List")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid subscription id supplied")})
     public Response createTags(@PathParam(ID_PARAM_NAME) final UUID id,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
@@ -957,7 +957,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove tags from subscription")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid subscription id supplied")})
     public Response deleteTags(@PathParam(ID_PARAM_NAME) final UUID id,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
index dc0f803..95485d3 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
@@ -202,7 +202,7 @@ public class TransactionResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove custom fields from payment transaction")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid transaction id supplied")})
     public Response deleteCustomFields(@PathParam(ID_PARAM_NAME) final UUID id,
-                                       @QueryParam(QUERY_CUSTOM_FIELDS) final String customFieldList,
+                                       @QueryParam(QUERY_CUSTOM_FIELD) final List<String> customFieldList,
                                        @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                        @HeaderParam(HDR_REASON) final String reason,
                                        @HeaderParam(HDR_COMMENT) final String comment,
@@ -235,7 +235,7 @@ public class TransactionResource extends JaxRsResourceBase {
     @ApiOperation(value = "Add tags to payment transaction", response = TagJson.class, responseContainer = "List")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid transaction id supplied")})
     public Response createTags(@PathParam(ID_PARAM_NAME) final UUID id,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,
@@ -253,7 +253,7 @@ public class TransactionResource extends JaxRsResourceBase {
     @ApiOperation(value = "Remove tags from payment transaction")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid transaction id supplied")})
     public Response deleteTags(@PathParam(ID_PARAM_NAME) final UUID id,
-                               @QueryParam(QUERY_TAGS) final String tagList,
+                               @QueryParam(QUERY_TAG) final List<String> tagList,
                                @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                @HeaderParam(HDR_REASON) final String reason,
                                @HeaderParam(HDR_COMMENT) final String comment,