[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [jersey-dev] Settting FormDataMultiPart entity stream in ContainerRequestFilter
|
Hi again,
I think figured it out using MessageBodyWriter<FormDataMultiPart>:
@Context Providers providers;
@Override
public void filter(ContainerRequestContext context) throws IOException
{
if (context.getMediaType() != null &&
context.getMediaType().isCompatible(MediaType.MULTIPART_FORM_DATA_TYPE))
{
try
{
ContainerRequest request = (ContainerRequest)context;
FormDataMultiPart multiPart =
request.readEntity(FormDataMultiPart.class);
fixRDFPostMultiPart(multiPart, StandardCharsets.UTF_8);
MultivaluedMap<String, Object> headers = new
MultivaluedHashMap<>();
request.getHeaders().entrySet().stream().forEach(entry
-> entry.getValue().forEach(value -> headers.add(entry.getKey(),
value)));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
MessageBodyWriter<FormDataMultiPart> writer =
getProviders().getMessageBodyWriter(FormDataMultiPart.class, null,
null, request.getMediaType());
writer.writeTo(multiPart, FormDataMultiPart.class,
null, null, request.getMediaType(), headers, baos);
request.setEntityStream(new
ByteArrayInputStream(baos.toByteArray()));
}
catch (ParsingException ex)
{
throw new IOException(ex);
}
}
}
On Thu, Oct 28, 2021 at 11:47 AM Martynas Jusevičius
<martynas@xxxxxxxxxxxxx> wrote:
>
> Hi,
>
> I have a ContainerRequestFilter that needs to fix some values in a
> multipart/form-data request body:
>
> public class RDFPostCleanupFilter implements ContainerRequestFilter
> {
>
> @Override
> public void filter(ContainerRequestContext context) throws IOException
> {
> if (context.getMediaType() != null &&
> context.getMediaType().isCompatible(MediaType.MULTIPART_FORM_DATA_TYPE))
> {
> try
> {
> ContainerRequest request = (ContainerRequest)context;
> FormDataMultiPart multiPart =
> request.readEntity(FormDataMultiPart.class);
> multiPart = fixRDFPostMultiPart(multiPart,
> StandardCharsets.UTF_8);
> // request.setEntityStream(???);
> }
> }
> }
>
> }
>
> How do I set the multiPart object with fixed values back onto the
> request context?
> Or how do I turn FormDataMultiPart into an InputStream so that I can
> use request.setEntityStream()? Presumingly via a byte array.
>
>
> Martynas