提交 c55486d5 编写于 作者: S Sam Brannen

Introduce alias for 'value' attribute in @RequestPart

Issue: SPR-11393
上级 034e0e2c
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -23,6 +23,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
import org.springframework.core.convert.converter.Converter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.multipart.MultipartFile;
......@@ -30,7 +31,9 @@ import org.springframework.web.multipart.MultipartResolver;
/**
* Annotation that can be used to associate the part of a "multipart/form-data" request
* with a method argument. Supported method argument types include {@link MultipartFile}
* with a method argument.
*
* <p>Supported method argument types include {@link MultipartFile}
* in conjunction with Spring's {@link MultipartResolver} abstraction,
* {@code javax.servlet.http.Part} in conjunction with Servlet 3.0 multipart requests,
* or otherwise for any other method argument, the content of the part is passed through an
......@@ -50,6 +53,7 @@ import org.springframework.web.multipart.MultipartResolver;
*
* @author Rossen Stoyanchev
* @author Arjen Poutsma
* @author Sam Brannen
* @since 3.1
*
* @see RequestParam
......@@ -61,15 +65,23 @@ import org.springframework.web.multipart.MultipartResolver;
public @interface RequestPart {
/**
* The name of the part in the "multipart/form-data" request to bind to.
* Alias for {@link #name}.
*/
@AliasFor(attribute = "name")
String value() default "";
/**
* The name of the part in the "multipart/form-data" request to bind to.
* @since 4.2
*/
@AliasFor(attribute = "value")
String name() default "";
/**
* Whether the part is required.
* <p>Default is {@code true}, leading to an exception thrown in case
* of the part missing in the request. Switch this to {@code false}
* if you prefer a {@code null} in case of the part missing.
* <p>Default is {@code true}, leading to an exception being thrown
* in case the part is missing in the request. Switch this to
* {@code false} if you prefer a {@code null} if the part is missing.
*/
boolean required() default true;
......
......@@ -188,8 +188,8 @@ public class RequestPartMethodArgumentResolver extends AbstractMessageConverterM
}
}
RequestPart ann = parameter.getParameterAnnotation(RequestPart.class);
boolean isRequired = ((ann == null || ann.required()) && !optional);
RequestPart requestPart = parameter.getParameterAnnotation(RequestPart.class);
boolean isRequired = ((requestPart == null || requestPart.required()) && !optional);
if (arg == null && isRequired) {
throw new MissingServletRequestPartException(partName);
......@@ -209,8 +209,8 @@ public class RequestPartMethodArgumentResolver extends AbstractMessageConverterM
}
private String getPartName(MethodParameter methodParam) {
RequestPart ann = methodParam.getParameterAnnotation(RequestPart.class);
String partName = (ann != null ? ann.value() : "");
RequestPart requestPart = methodParam.getParameterAnnotation(RequestPart.class);
String partName = (requestPart != null ? requestPart.name() : "");
if (partName.length() == 0) {
partName = methodParam.getParameterName();
if (partName == null) {
......
......@@ -179,14 +179,13 @@ public class RequestPartIntegrationTests {
}
}
@SuppressWarnings("unused")
@Controller
private static class RequestPartTestController {
@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = { "multipart/mixed", "multipart/form-data" })
public ResponseEntity<Object> create(@RequestPart("json-data") TestData testData,
public ResponseEntity<Object> create(@RequestPart(name = "json-data") TestData testData,
@RequestPart("file-data") MultipartFile file,
@RequestPart(value = "empty-data", required = false) TestData emptyData) {
@RequestPart(name = "empty-data", required = false) TestData emptyData) {
String url = "http://localhost:8080/test/" + testData.getName() + "/" + file.getOriginalFilename();
HttpHeaders headers = new HttpHeaders();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册