de inicio de primavera los datos del formulario de subida y archivo

Lazaruss:

Estoy haciendo una aplicación de arranque resorte resto. Estoy tratando de hacer un controlador de formulario de carga de varias partes que se encargará de un formulario de datos y una carga de archivos juntos. Este es mi código del controlador en el momento:

    @RequestMapping(value = "", method = RequestMethod.POST, headers="Content-Type=multipart/form-data")
    @PreAuthorize("hasRole('ROLE_MODERATOR')")
    @ResponseStatus(HttpStatus.CREATED)
    public void createNewObjectWithImage(
            /*@RequestParam(value="file", required=true) MultipartFile file,
            @RequestParam(value="param_name_1", required=true) final String param_name_1,
            @RequestParam(value="param_name_2", required=true) final String param_name_2,
            @RequestParam(value="param_name_3", required=true) final String param_name_3,
            @RequestParam(value="param_name_4", required=true) final String param_name_4,
            @RequestParam(value="param_name_5", required=true) final String param_name_5*/
            @ModelAttribute ModelDTO model,
            BindingResult result) throws MyRestPreconditionsException {

        //ModelDTO model = new ModelDTO(param_name_1, param_name_2, param_name_3, param_name_4, param_name_5);

        modelValidator.validate(model, result);
        if(result.hasErrors()){
            MyRestPreconditionsException ex = new MyRestPreconditionsException(
                    "Model creation error",
                    "Some of the elements in the request are missing or invalid");
            ex.getErrors().addAll(
                    result.getFieldErrors().stream().map(f -> f.getField()+" - "+f.getDefaultMessage()).collect(Collectors.toList()));
            throw ex;
        }
// at the moment, model has a MultipartFile property
        //model.setImage(file);
        modelServiceImpl.addNew(model);
    }

He intentado tanto con la anotación @ModelAttribute y envío de parámetros de la petición, pero ambos de estos métodos han fracasado.

Esta es la petición que yo envío a:

---------------------------acebdf13572468
Content-Disposition: form-data; name="file"; filename="mint.jpg"
Content-Type: image/jpeg

<@INCLUDE *C:\Users\Lazaruss\Desktop\mint.jpg*@>
---------------------------acebdf13572468
Content-Disposition: form-data; name=”param_name_1”

string_value_1
---------------------------acebdf13572468
Content-Disposition: form-data; name=”param_name_2”

string_value_2
---------------------------acebdf13572468
Content-Disposition: form-data; name=”param_name_3”

string_value_3
---------------------------acebdf13572468
Content-Disposition: form-data; name=”param_name_4”

string_value_4
---------------------------acebdf13572468
Content-Disposition: form-data; name=”param_name_5”

string_value_5
---------------------------acebdf13572468--

Mi solicitud es sin estado, y utiliza la seguridad de la primavera con las autoridades. En mi paquete de seguridad, he incluido la clase AbstractSecurityWebApplicationInitializer

public class SecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer {

    @Override
    protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
            insertFilters(servletContext, new MultipartFilter());
        }
    }

También uso una StandardServletMultipartResolver en mi clase @Configuration

Y en mi WebInitializer, añado este código:

MultipartConfigElement multipartConfigElement = new MultipartConfigElement("/tmp", 
                3 * 1024 * 1024, 6 * 1024 * 1024, 1 * 512 * 1024);        
apiSR.setMultipartConfig(multipartConfigElement);

Cuando intento utilizar el controlador con el código comentado (@RequestParams anotaciones), consigo un error 404 no encontrado. Y cuando intento utilizar el controlador con la anotación @ModuleAttribute, el objeto se encuentra vacío.

Moler:

Tuve un problema similar. Cuando se desea enviar Object+ Multipart. Tienes que (o al menos yo no sé otra solución) que el controlador de esa manera:

public void createNewObjectWithImage(@RequestParam("model") String model, @RequestParam(value = "file", required = false) MultipartFile file)

Y luego: Convertir cadena a su objeto usando:

ObjectMapper mapper = new ObjectMapper();
ModelDTO modelDTO = mapper.readValue(model, ModelDTO.class);

Y en cartero puede enviarlo así: introducir descripción de la imagen aquí

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=195914&siteId=1
Recomendado
Clasificación