Мне нужно передать значение ограничения, которое содержит текст из разных языков UTF (немецкий, сербский, каталанский, китайский, ....) в качестве queryParam в моем HTTP-запросе.
Попытка с использованием URLEncoder.encode и URLDecoder.decode с другой стороны, но не сработала.
Пробовал с использованием UriComponent.encode / decode и тоже не помогло.
Попытка добавления заголовка к моему запросу с кодировкой utf-8.
Пробовал с использованием @ Connsumes / @ Produces / @ Кодированная аннотация jersy, но все та же.
Клиентская сторона:
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());
}
...
Серверная часть:
@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);
}
Привет.