Sembra che Jersey 2.0 (utilizzando servlet 3.1) non sia in grado di decodificare un parametro quando la proprietà charset
è specificata nell'intestazione Content-Type
.Jersey e @FormParam non funzionano quando il set di caratteri è specificato nel Content-Type
ad esempio sulla base dei seguenti endpoint:
@POST
@Path("/hello")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response hello(@FormParam("name") String name) {
System.out.println(name);
return ok();
}
Questo ricciolo richiesta funziona:
curl -X POST -H "content-type: application/x-www-form-urlencoded" -d "name=tom" http://localhost:8080/sampleapp/hello
La seguente richiesta invece non lavoro e il parametro name
è null
:
curl -X POST -H "content-type: application/x-www-form-urlencoded; charset=UTF-8" -d "name=tom" http://localhost:8080/sampleapp/hello
Penso che l'aggiunta charset=UTF-8
nel tipo di contenuto rompa il mio codice.
EDIT:
Ho aperto un biglietto ufficiale nel caso in cui questo è un bug: https://java.net/jira/browse/JERSEY-1978
Ho aperto un biglietto https://java.net/jira/browse/JERSEY-1978 – Mark
Come posso utilizzare un filtro per modificare l'intestazione 'Content-Type'? – Mark
Ho modificato la risposta. Non è testato, però. –