Skip to content

\n in form model when using Jetty 12 client and multipart/form-data #31361

Closed
@mhalbritter

Description

@mhalbritter

Hello,

I'm using Jetty 12.0.1 and observe the control character \r in my populated model attribute. With Jetty I have this controller:

@RestController
public class FormSubmissionController {

	@PostMapping(path = "/", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
	public OutputForm greetingSubmit(@ModelAttribute InputForm form) {
		return new OutputForm(form.firstName, form.lastName);
	}

	public record InputForm(String firstName, String lastName) {
	}

	public record OutputForm(String firstName, String lastName) {
	}

}

and i expect this test to pass:

@SpringBootTest(webEnvironment =  SpringBootTest.WebEnvironment.RANDOM_PORT)
class JettyFormSubmissionApplicationTests {

	@Autowired
	private TestRestTemplate testRestTemplate;

	@Test
	void test() {
		MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
		formData.add("firstName", "first-name");
		formData.add("lastName", "last-name");

		HttpHeaders headers = new HttpHeaders();
		headers.add("Content-Type", MediaType.MULTIPART_FORM_DATA_VALUE);
		RequestEntity<?> requestEntity = new RequestEntity<>(formData, headers, HttpMethod.POST, URI.create("/"));
		ResponseEntity<FormSubmissionController.OutputForm> result = this.testRestTemplate.exchange(requestEntity, FormSubmissionController.OutputForm.class);
		assertThat(result.getBody().firstName()).isEqualTo("first-name");
		assertThat(result.getBody().lastName()).isEqualTo("last-name");
	}
}

This fails with Jetty 12, giving me this error message:

org.opentest4j.AssertionFailedError: 
expected: "last-name"
 but was: "
last-name"

With Jetty 11.0.15, it works.

I have prepared a small reproducer. You can switch back to Jetty 11 by editing the build.gradle, i've put some comments in.

jetty-form-submission.zip

Metadata

Metadata

Assignees

Labels

in: webIssues in web modules (web, webmvc, webflux, websocket)type: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions