revised @RequestParam processing to support CSV-to-array/collection binding with ConversionService (SPR-7479)
This commit is contained in:
parent
af7203b839
commit
907febd86e
|
|
@ -104,6 +104,7 @@ import org.springframework.validation.FieldError;
|
||||||
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
|
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
|
||||||
import org.springframework.web.bind.WebDataBinder;
|
import org.springframework.web.bind.WebDataBinder;
|
||||||
import org.springframework.web.bind.annotation.CookieValue;
|
import org.springframework.web.bind.annotation.CookieValue;
|
||||||
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.InitBinder;
|
import org.springframework.web.bind.annotation.InitBinder;
|
||||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
|
@ -114,7 +115,6 @@ import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||||
import org.springframework.web.bind.annotation.SessionAttributes;
|
import org.springframework.web.bind.annotation.SessionAttributes;
|
||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
|
||||||
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
|
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
|
||||||
import org.springframework.web.bind.support.WebArgumentResolver;
|
import org.springframework.web.bind.support.WebArgumentResolver;
|
||||||
import org.springframework.web.bind.support.WebBindingInitializer;
|
import org.springframework.web.bind.support.WebBindingInitializer;
|
||||||
|
|
@ -1715,6 +1715,19 @@ public class ServletAnnotationControllerTests {
|
||||||
assertEquals("Juergen", response.getContentAsString());
|
assertEquals("Juergen", response.getContentAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void regularParameterAsSingleString() throws Exception {
|
||||||
|
initServlet(MultipartController.class);
|
||||||
|
|
||||||
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||||
|
request.setRequestURI("/singleString");
|
||||||
|
request.setMethod("POST");
|
||||||
|
request.addParameter("content", "Juergen");
|
||||||
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||||
|
servlet.service(request, response);
|
||||||
|
assertEquals("Juergen", response.getContentAsString());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void multipartFileAsStringArray() throws Exception {
|
public void multipartFileAsStringArray() throws Exception {
|
||||||
initServlet(MultipartController.class);
|
initServlet(MultipartController.class);
|
||||||
|
|
@ -1727,6 +1740,19 @@ public class ServletAnnotationControllerTests {
|
||||||
assertEquals("Juergen", response.getContentAsString());
|
assertEquals("Juergen", response.getContentAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void regularParameterAsStringArray() throws Exception {
|
||||||
|
initServlet(MultipartController.class);
|
||||||
|
|
||||||
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||||
|
request.setRequestURI("/stringArray");
|
||||||
|
request.setMethod("POST");
|
||||||
|
request.addParameter("content", "Juergen");
|
||||||
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||||
|
servlet.service(request, response);
|
||||||
|
assertEquals("Juergen", response.getContentAsString());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void multipartFilesAsStringArray() throws Exception {
|
public void multipartFilesAsStringArray() throws Exception {
|
||||||
initServlet(MultipartController.class);
|
initServlet(MultipartController.class);
|
||||||
|
|
@ -1737,7 +1763,49 @@ public class ServletAnnotationControllerTests {
|
||||||
request.addFile(new MockMultipartFile("content", "Eva".getBytes()));
|
request.addFile(new MockMultipartFile("content", "Eva".getBytes()));
|
||||||
MockHttpServletResponse response = new MockHttpServletResponse();
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||||
servlet.service(request, response);
|
servlet.service(request, response);
|
||||||
assertEquals("Juergen,Eva", response.getContentAsString());
|
assertEquals("Juergen-Eva", response.getContentAsString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void regularParametersAsStringArray() throws Exception {
|
||||||
|
initServlet(MultipartController.class);
|
||||||
|
|
||||||
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||||
|
request.setRequestURI("/stringArray");
|
||||||
|
request.setMethod("POST");
|
||||||
|
request.addParameter("content", "Juergen");
|
||||||
|
request.addParameter("content", "Eva");
|
||||||
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||||
|
servlet.service(request, response);
|
||||||
|
assertEquals("Juergen-Eva", response.getContentAsString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parameterCsvAsStringArray() throws Exception {
|
||||||
|
servlet = new DispatcherServlet() {
|
||||||
|
@Override
|
||||||
|
protected WebApplicationContext createWebApplicationContext(WebApplicationContext parent) {
|
||||||
|
GenericWebApplicationContext wac = new GenericWebApplicationContext();
|
||||||
|
wac.registerBeanDefinition("controller", new RootBeanDefinition(CsvController.class));
|
||||||
|
RootBeanDefinition csDef = new RootBeanDefinition(FormattingConversionServiceFactoryBean.class);
|
||||||
|
RootBeanDefinition wbiDef = new RootBeanDefinition(ConfigurableWebBindingInitializer.class);
|
||||||
|
wbiDef.getPropertyValues().add("conversionService", csDef);
|
||||||
|
RootBeanDefinition adapterDef = new RootBeanDefinition(AnnotationMethodHandlerAdapter.class);
|
||||||
|
adapterDef.getPropertyValues().add("webBindingInitializer", wbiDef);
|
||||||
|
wac.registerBeanDefinition("handlerAdapter", adapterDef);
|
||||||
|
wac.refresh();
|
||||||
|
return wac;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
servlet.init(new MockServletConfig());
|
||||||
|
|
||||||
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||||
|
request.setRequestURI("/integerArray");
|
||||||
|
request.setMethod("POST");
|
||||||
|
request.addParameter("content", "1,2");
|
||||||
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||||
|
servlet.service(request, response);
|
||||||
|
assertEquals("1-2", response.getContentAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2983,7 +3051,21 @@ public class ServletAnnotationControllerTests {
|
||||||
|
|
||||||
@RequestMapping("/stringArray")
|
@RequestMapping("/stringArray")
|
||||||
public void processMultipart(@RequestParam("content") String[] content, HttpServletResponse response) throws IOException {
|
public void processMultipart(@RequestParam("content") String[] content, HttpServletResponse response) throws IOException {
|
||||||
response.getWriter().write(StringUtils.arrayToCommaDelimitedString(content));
|
response.getWriter().write(StringUtils.arrayToDelimitedString(content, "-"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public static class CsvController {
|
||||||
|
|
||||||
|
@RequestMapping("/singleInteger")
|
||||||
|
public void processCsv(@RequestParam("content") Integer content, HttpServletResponse response) throws IOException {
|
||||||
|
response.getWriter().write(content.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping("/integerArray")
|
||||||
|
public void processCsv(@RequestParam("content") Integer[] content, HttpServletResponse response) throws IOException {
|
||||||
|
response.getWriter().write(StringUtils.arrayToDelimitedString(content, "-"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue