Java 将post参数映射到请求中的DTO

Java 将post参数映射到请求中的DTO,java,spring,spring-mvc,spring-boot,java-8,Java,Spring,Spring Mvc,Spring Boot,Java 8,在我的Springboot应用程序中,我用以下参数发送POST数据: 在我的@控制器中我有: @RequestMapping( value = "/new/upload", method = RequestMethod.POST, produces = BaseController.MIME_JSON, consumes = BaseController.MIME_JSON ) public @ResponseBody HttpResponse performSp

在我的
Spring
boot应用程序中,我用以下参数发送
POST
数据:

在我的
@控制器中
我有:

@RequestMapping(
        value = "/new/upload", method = RequestMethod.POST,
        produces = BaseController.MIME_JSON, consumes = BaseController.MIME_JSON
)
public @ResponseBody HttpResponse performSpotUpload(final SpotDTO spot) {
// ...
}
其中
SpotDTO
是一个非
POJO
类,包含所有
getter
setter

public class SpotDTO implements DataTransferObject {

    @JsonProperty("title")
    private String title;

    @JsonProperty("tags")
    private String[] tags;

    @JsonProperty("latitude")
    private double latitude;

    @JsonProperty("longitude")
    private double longitude;

    @JsonProperty("files")
    private MultipartFile[] multipartFiles;

    // all getters and setters
}
不幸的是,当我收到请求时,所有字段都是
null
。Spring无法将参数映射到my
DTO
对象

我想我遗漏了一些配置,但我不知道是哪一个


其他类似的问题可以通过在
DTO
类上设置字段访问器来解决。这对我不起作用

我还注意到,如果我在方法中指定每个参数:

@RequestParam("title") final String title,

请求甚至无法到达该方法。我可以在
LoggingInterceptor
preHandle
方法中看到传入的请求,但在
postHandle
中什么也看不到。返回
404
响应

我认为您只是缺少参数上的注释:

@RequestMapping(
        value = "/new/upload", method = RequestMethod.POST,
        produces = BaseController.MIME_JSON, consumes = BaseController.MIME_JSON
)
public @ResponseBody HttpResponse performSpotUpload(@RequestBody final SpotDTO spot) {
    // ...
}

您应该在spot之前添加
@RequestBody
注释。即
@RequestBody spotd到spot

 public @ResponseBody HttpResponse performSpotUpload(@RequestBody SpotDTO spot) {
    // ...
  }

Chrome开发工具中的请求对象具有所有必需的值?@ASOlivieri是的,所有设置(虽然文件是一个空数组,但它不应破坏控制器)您应该在
@RequestBody
注释之前添加
spotdt到spot
。i、 e
@RequestBody spotd to spot
您的控制器类还应该使用@RestController以及Hadi J所说的内容进行注释。随着我忘记它的次数的增加,我现在习惯于查找它。
 public @ResponseBody HttpResponse performSpotUpload(@RequestBody SpotDTO spot) {
    // ...
  }