How to disable trimming of whitespace when getting form data with using Thymeleaf in Spring

I created a form with using Thymeleaf which listened by controller. When I input a string that contains leading or trailing spaces (example: ” abc “.), the string auto trimmed in the controller (example: “abc”.). But I want to keep these leading or trailing spaces even the value passed into controller. How can I do that?

Example code:

Form with using Thymeleaf:

<form role="form" action="/" method="post" autocomplete="off" th:action="@{/change-password}" th:object="${form}">
  <div>
    <label for="new-pass" th:text="#{password.newPassword}">New password</label>
    <input type="password" th:field="*{password}" th:placeholder="#{password.newPassword}" required="required" />
  </div>
  <div>
    <button type="submit" th:text="#{confirm}">Change</button>
    <a href="/" th:href="@{/}" th:text="#{cancel}">Cancel</a>
  </div>
</form>

Controller for page:

@RequestMapping(value = "/change-password", method = RequestMethod.GET)
public String changePassword(@ModelAttribute("form") ChangeMyPasswordForm form) {
    return "/account/change-pass";
}

Controller that handling form action:

@RequestMapping(value = "/change-password", method = RequestMethod.POST)
public void changeSelfPassword(ChangeMyPasswordForm form) {
    System.out.println(form.getPassword());
}

Class ChangeMyPasswordForm:

public class ChangeMyPasswordForm {

    private String password;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

The String that input in the form:

"   abc   "

Expected result in the controller System.out.println:

"   abc   "

Actual result:

"abc"

Answer

First you need to check where the values are being truncated thymeleaf or Spring?

You can do that by printing values using jquery/javascript before form submission.

By default spring it doesn’t trim the parameters. just check that you are NOT using StringTrimmerEditor like below.

@Controller
public class MyFormController {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
    }

    // ...
}

Leave a Reply

Your email address will not be published. Required fields are marked *