0

I need to pass a constraint value which contains text from different UTF languages (German, Serbian, Catalan, Chinese, ....) as a queryParam in my HTTP Request.

Tried using URLEncoder.encode and URLDecoder.decode from the other side but didn't work.

Tried using UriComponent.encode/decode and also didnt help.

Tried adding a header to my request with utf-8 charset.

Tried using @Connsumes/@Produces/@Encoded jersy annotation but still the same.

Client side:

private static final String ENCODING = "UTF-8";
private static final String CHARSET= "charset=" + ENCODING;

Invocation.Builder builder;
    try {
        builder = baseTarget.path(apiPath + "setConstraint")
                //.queryParam("constraint", constraint)
                .queryParam("constraint",UriComponent.encode(constraint, UriComponent.Type.FRAGMENT))
                .queryParam("path", URLEncoder.encode(jsonRuleIdString, ENCODING))
                .request(MediaType.APPLICATION_JSON)
                .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON + "; " + CHARSET );
    } catch (UnsupportedEncodingException ex) {
        throw new SpecificationException(ex.getMessage());
    }

...

Server side:

@RequestMapping (method = RequestMethod.POST, value= "setConstraint")
@Consumes({ MediaType.APPLICATION_JSON + ";charset=UTF-8"})
@Produces({ MediaType.APPLICATION_JSON + ";charset=UTF-8"})
public RuleStruct setConstraint( 
        @RequestParam(value="constraint", required = true) @Encoded String constraint,
        @RequestParam(value="path", required = true) String strPath) throws SpecificationException, ProjectManagementException {

    logger.info("Set Constraint");

    RuleId path;
    try {
        path = strPath.isEmpty() ? null : mapper.readValue(URLDecoder.decode(strPath, ENCODING), RuleId.class);
        constraint = UriComponent.decode(constraint, UriComponent.Type.FRAGMENT);
    } catch (IOException e) {
        throw new SpecificationException(e.getMessage());
    }

    return getRuleEditorService(sessionId).editRule(path).setConstraint(constraint);
}

Regards.

zbeedatm
  • 601
  • 1
  • 15
  • 39

1 Answers1

0

Following this post: http://jersey.576304.n2.nabble.com/QueryParam-and-character-encoding-td6928014.html

I searched to "tomcat query param utf encoding" and reached this solution: How to set request encoding in Tomcat?

Once I added URIEncoding="UTF-8" to my tag in server.xml of tomcat container it worked.

zbeedatm
  • 601
  • 1
  • 15
  • 39