【问题标题】:How to retrieve file from angular multipart/form data request in spring mvc如何从spring mvc中的角度多部分/表单数据请求中检索文件
【发布时间】:2016-01-11 19:47:01
【问题描述】:

我使用 ngFileUpload 指令向客户端发送数据:

$scope.upload = function (dataUrl, formValid) {
                if (formValid && formValid === true) {
                    console.log($scope.user);
                    Upload.upload({
                        url: 'http://localhost:8080/user/',
                        data: $scope.setPhotoAndReturnUser(Upload.dataUrltoBlob(dataUrl))
                   .......
$scope.setPhotoAndReturnUser = function (photo) {
                $scope.user.photo.image = photo;
                return $scope.user;
            };

User 对象包含附加的用户信息用户名、电子邮件等。 这是请求的样子:

@RestController
@RequestMapping("/user")
public class UserRestController {
      @RequestMapping(method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
                public ResponseEntity newUser(HttpServletRequest request) {
                    MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
                    UserDTO user = new UserDTO(mRequest);
                    if (service.validate(user)) {
                        registrationService.register(user, request);
                        return new ResponseEntity(HttpStatus.NO_CONTENT);
                    }
                    return new ResponseEntity(HttpStatus.BAD_REQUEST);
            }

我的域转移对象构造函数:

 public UserDTO(MultipartHttpServletRequest request) {
                this.userEmail = request.getParameter("userEmail");
                this.userName = request.getParameter("userName");
                this.userPass = request.getParameter("userPass");

这是我得到的例外:

引起:java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonProperty$Access

我的多部分解析器配置:

@Bean
    MultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setMaxUploadSize(1000000);
        return resolver;
    }

我使用: 杰克逊核心 2.4.6 杰克逊数据绑定:2.6.4

但我无法完全理解发生了什么,我的方法参数中没有任何域对象,并且根据开发人员工具,请求被编码为多部分/表单数据。我是否应该尝试使用 spring 匿名身份验证,并将注册过程分成两个不同的请求?

【问题讨论】:

  • 你能发布你的 UserDTO 课程吗

标签: java angularjs spring spring-mvc


【解决方案1】:

问题在于请求参数的命名错误,我必须这样做而不是将所有数据作为一个对象发送:

Upload.upload({
                        url: 'http://localhost:8080/user/',
                        file:Upload.dataUrltoBlob(dataUrl)
                        fields: {...}

我的 maven 依赖也有问题,因为 spring 4 推荐的 jackson libery 是

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.3.3</version>
        </dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2020-10-12
    • 2021-04-11
    • 2018-06-10
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多