i have a common problem to test Post-Request with Bean Validation.
Requirements: ContentType is APPLICATION_FORM_URLENCODED and NOT JSON
Model under test:
public class Message extends Auditable{
@Id
private long id;
private String messageText;
@NotNull
private Link link;
}
How it works on browser properly: I'am just submit data. On Browser Dev-Tools, i see, that browser sends only to fields: messageText="my message" and link="1"
problem: during MockMVC Post-Request, i can not convert param-value "1" to the object Link.
this.mockMvc.perform(MockMvcRequestBuilders.post("/links/link/comments")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.param("link", "1")
.param("messageText", "hello message"))
.andDo(print())
.andExpect(status().is3xxRedirection());
}
My post-handler on controller
@PostMapping(value = "/link/message")
public String saveNewComment(@Valid Message message, BindingResult bindingResult, RedirectAttributes attributes) {
if(bindingResult.hasErrors()) {
model.addAttribute("newMessage", message);
return "link/submit";
}
}
BindingResult complains about TypeMismatch from "String" to "Link".
How can i pass some Marschal- or Converter-Object, which enables BindingResult to convert string-value to appropriate object?
I don't want to implement on server-side own validator-object (which implements validator interface), cause on production it works properly without any additional code.