1

currently, I am working on a Spring Rest Endpoint (not Spring Boot) which I deploy to a Tomcat Servlet Container. It takes a Multipart form

@PostMapping(value = "/audit/{auditNumber}/file", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity<?> uploadFileForAudit(// @PathVariable String peNumber, // @RequestParam("category") String category, // @RequestParam("documents") MultipartFile file, // @RequestParam("description") String description, // @RequestHeader Map<String, String> headers) { System.out.println("category "+category); System.out.println("description "+description); 

When German Umlauts are sent as category or description, the console output looks like this:

category Prüfungsanordnung description öäü 

I have other Rest Resources, but they are working. Somehow this Resource has the wrong encoding. I suspect the Multipart-form to be the problem.

The frontend is not the problem. I can use JavaScript fetch or Postman and both have the same result.

Any hint is appreciated.

1 Answer 1

1

For PostMapping you can't use URIEncoding="UTF-8" so instead of that you can define a filter to tell Tomcat that your request encoding is UTF-8, either you can add this to web.xml:

<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 

or add this filter :

public class EncodingFilter implements Filter { private String encoding = "UTF-8"; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); chain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException { if (config.getInitParameter("encoding") != null) { encoding = config.getInitParameter("encoding"); } } } 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.