OpenFeign / OpenFeign/feign

unable to add "literal" header values on template

Open
#1,305 9 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

feedback provided question
Dominant language
Java
Stars
9.8k
Forks
1.9k
Avg merge
1d 2h
Merged PRs (30d)
41

Description

I am trying to use a feign.RequestInterceptor to add headers on the fly, these headers values are simple json. Example :

public void apply(RequestTemplate template) {
  template.header("dummy", "{\"A\":{\"B\":\"C\"}}");
}

With version 10.7.4 I have got :

java.util.regex.PatternSyntaxException: Illegal repetition
{"B"

	at java.base/java.util.regex.Pattern.error(Pattern.java:2015)
	at java.base/java.util.regex.Pattern.closure(Pattern.java:3308)
	at java.base/java.util.regex.Pattern.sequence(Pattern.java:2201)
	at java.base/java.util.regex.Pattern.expr(Pattern.java:2056)
	at java.base/java.util.regex.Pattern.compile(Pattern.java:1778)
	at java.base/java.util.regex.Pattern.<init>(Pattern.java:1427)
	at java.base/java.util.regex.Pattern.compile(Pattern.java:1068)
	at feign.template.Expression.lambda$new$0(Expression.java:35)
	at java.base/java.util.Optional.ifPresent(Optional.java:183)
	at feign.template.Expression.<init>(Expression.java:35)
	at feign.template.Expressions$SimpleExpression.<init>(Expressions.java:106)
	at feign.template.Expressions.create(Expressions.java:86)
	at feign.template.Template.parseFragment(Template.java:194)
	at feign.template.Template.parseTemplate(Template.java:178)
	at feign.template.Template.<init>(Template.java:60)
	at feign.template.HeaderTemplate.<init>(HeaderTemplate.java:81)
	at feign.template.HeaderTemplate.create(HeaderTemplate.java:57)
	at feign.RequestTemplate.lambda$appendHeader$3(RequestTemplate.java:742)
	at java.base/java.util.Map.compute(Map.java:1171)
	at feign.RequestTemplate.appendHeader(RequestTemplate.java:740)
	at feign.RequestTemplate.header(RequestTemplate.java:710)
	at feign.RequestTemplate.header(RequestTemplate.java:692)

After seeing GH-1172 I had some hopes and tried with version 10.10.1, but got the same error.

I want to add "raw" headers values, no templated/parsed ones.
One simple solution would just to let this method public on RequestTemplate :

private RequestTemplate header(String name, TemplateChunk... chunks)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with RequestTemplate.header and the HeaderTemplate, Template, and Expression classes named in the stack trace. Reproduce the failure with a literal JSON header through RequestInterceptor, then inspect how header values are parsed. Done means literal values no longer trigger template-expression parsing and the existing behavior remains covered by tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
api, backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.