eclipse-ee4j / eclipse-ee4j/jersey

Custom Java type for consuming request parameters

Open
#4,146 8 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
730
Forks
382
PR merge metrics
No merged PRs in 30d

Description

I recently upgraded from Jersey 2.25.1 to 2.28 and am facing problems with a @FormParam that is a list of custom java type.

REST endpoint looks like this:
```java
@POST
@Path("/person")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response getPerson(@FormParam("attributes") final List attributes) {
//
}
```

The Attr class has "toString" and "valueOf" implemented - according to the documentation (https://jersey.github.io/documentation/latest/jaxrs-resources.html#d0e2271) the java type must have a static method named valueOf **OR** fromString. However I found that I required both for this to work after the upgrade. Before the upgrade it worked just fine.

I tried to implement:
fromString only -> does not work
valueOf only -> does not work
fromString & valueOf -> works fine

Stacktrace:
```java
org.glassfish.jersey.server.ParamException$FormParamException: HTTP 400 Bad Request
at org.glassfish.jersey.server.internal.inject.FormParamValueParamProvider$FormParamValueProvider.apply(FormParamValueParamProvider.java:141) ~[jersey-server-2.28.jar:?]
at org.glassfish.jersey.server.internal.inject.FormParamValueParamProvider$FormParamValueProvider.apply(FormParamValueParamProvider.java:83) ~[jersey-server-2.28.jar:?]
at org.glassfish.jersey.server.spi.internal.ParamValueFactoryWithSource.apply(ParamValueFactoryWithSource.java:50) ~[jersey-server-2.28.jar:?]
at org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:64) ~[jersey-server-2.28.jar:?]
...
Caused by: org.glassfish.jersey.internal.inject.ExtractorException: Error un-marshalling JAXB object of type: class com.test.Attr.
at org.glassfish.jersey.jaxb.internal.JaxbStringReaderProvider$RootElementProvider$1.fromString(JaxbStringReaderProvider.java:172) ~[jersey-media-jaxb-2.28.jar:?]
at org.glassfish.jersey.server.internal.inject.AbstractParamValueExtractor.convert(AbstractParamValueExtractor.java:116) ~[jersey-server-2.28.jar:?]
at org.glassfish.jersey.server.internal.inject.AbstractParamValueExtractor.fromString(AbstractParamValueExtractor.java:107) ~[jersey-server-2.28.jar:?]
at org.glassfish.jersey.server.internal.inject.CollectionExtractor.extract(CollectionExtractor.java:64) ~[jersey-server-2.28.jar:?]
at org.glassfish.jersey.server.internal.inject.CollectionExtractor$ListValueOf.extract(CollectionExtractor.java:83) ~[jersey-server-2.28.jar:?]
at org.glassfish.jersey.server.internal.inject.FormParamValueParamProvider$FormParamValueProvider.apply(FormParamValueParamProvider.java:138) ~[jersey-server-2.28.jar:?]
...
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.