WarehouseCreateResponseFilter.java

package com.fulfilment.application.monolith.warehouses.adapters.restapi;

import jakarta.ws.rs.container.ContainerRequestContext;
import jakarta.ws.rs.container.ContainerResponseContext;
import jakarta.ws.rs.container.ContainerResponseFilter;
import jakarta.ws.rs.ext.Provider;

/**
 * Maps the default 200 response from POST /warehouse to 201 (Created).
 *
 * RESTEasy Reactive does not propagate @ResponseStatus from an implementing
 * class method when the resource contract is defined on a generated interface.
 * This filter applies the correct HTTP semantics defined in the OpenAPI spec.
 */
@Provider
public class WarehouseCreateResponseFilter implements ContainerResponseFilter {

  @Override
  public void filter(ContainerRequestContext req, ContainerResponseContext resp) {
    if ("POST".equals(req.getMethod())
        && "/warehouse".equals(req.getUriInfo().getPath())
        && resp.getStatus() == 200) {
      resp.setStatus(201);
    }
  }
}