[undertow-dev] UTF8 form parsing

Laurent Bedubourg lbedubourg at gmail.com
Sat Dec 13 04:54:40 EST 2014


Hello,

I am using utf-8 as default encoding for the web and it didn't worked out
of the box with Undertow and EagerFormParsingHandler.

It turned out that MultiPartParserDefinition has a default iso-8859-1
encoding and that it's quite hard to change it. You have to create a custom
FormParserFactory containing a MultiPartParserDefinition with the right
setDefaultEncoding() that's a lot of work for something that common and I
had to spend half an hour looking at Undertow sources to understand how it
work and why my input was garbage.

The assumption that Browsers will add a "; charset=UTF-8" to the Content
type is false (at least with google chrome).

My temporary hack is to override EagerFormParsingHandler and modify the
request CONTENT_TYPE header to add the UTF-8 charset and then setNext my
real HttpHandler (I had less mental friction doing this than learning how
to create my custom FormParserFactor).

new EagerFormParsingHandler(){
  override def handleRequest(x:HttpServerExchange){
    val ct = x.getRequestHeaders().get(Headers.CONTENT_TYPE).getLast()
    x.getRequestHeaders().put(Headers.CONTENT_TYPE, ct+"; charset=UTF-8")
    super.handleRequest(x)
  }
}.setNext(new HttpHandler(){
  def handleRequest(x:HttpServerExchange){ ... }
})

Now that I know it I can create my own Utf8FormParsingHandler but I imagine
that other users will want to be able to define the encoding out of the box.

Maybe with a new self documenting contructor like :

new EagerFormParsingHandler(encoding:String, nextHandler:HttpHandler)

Best regards
Laurent
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/undertow-dev/attachments/20141213/1190ad43/attachment.html 


More information about the undertow-dev mailing list