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无法将参数映射到myDTO
对象
我想我遗漏了一些配置,但我不知道是哪一个
其他类似的问题可以通过在
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) {
// ...
}