我必须使用DTO创建GET方法。但是当我这样编写代码时↓,发生错误。org.springframework.web.bind.MissingServletRequestParameterException:方法参数类型SampleDTO的所需请求参数'param'不存在 *
在检查了这个错误之后,我发现我需要添加选项@RequestParam(required=false)。然后,我重新启动tomcat。虽然没有更多的错误,但我的参数为null(我实际上发送了sample_name)。x1c 0d1x
并且我尝试使用no annotation和@ModelAttribute,两者都出现相同的错误↓ * 起因:java.lang.NoSuchMethodError:org.springframework.beans.BeanUtils.getResolvableConstructor(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
我该怎么办?请给予我建议。我不知道最好的方式处理DTO。因为我通常使用HashMap编码。
下面是我的示例代码。
//控制器示例
point:insertSample方法运行良好。
@RestController
@RequestMapping("/sample")
public class SampleController {
@Autowired
private SampleService sampleService;
@GetMapping
public Result getSampleList(@RequestParam SampleDTO param) throws Exception {
// (@RequestParam(required=false) SampleDTO param)
// (@ModelAttribute SampleDTO param)
// (SampleDTO param)
return sampleService.getFolderList(param);
}
@PostMapping
public Result insertSample(@RequestBody SampleDTO param) throws Exception {
return sampleService.insertFolder(param);
}
}
字符串
// DTO示例
@Getter // I didn't attach @Setter because of @Builder.
@NoArgsConstructor
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
@Alias("SampleDTO")
public class SampleDTO {
@NotNull
private Long sampleNo;
@NotBlank
private String sampleName;
private String sampleDesc;
@Builder
public SampleDTO(Long sampleNo, String sampleName, String sampleDesc) {
this.sampleNo = sampleNo;
this.sampleName = sampleName;
this.sampleDesc = sampleDesc;
}
}
型
3条答案
按热度按时间db2dz4w81#
为了将请求参数绑定到对象,你需要在你的DTO类中有标准的getter/setter。将
@Setter
添加到你的方法中,然后你可以在没有任何注解的情况下进行绑定。字符串
cidc1ykv2#
字符串
像这样尝试,你应该指定变量
3ks5zfa03#
字符串
删除@RequestParam Annotation并添加setter对我来说很有用。也可以在DTO中设置默认值,如:
型
如果请求中包含的参数在dto中不存在,则会被忽略。
如果有一个dto成员变量不存在于请求中,并且没有默认值,则其为null。
是否有办法在dto中将params标记为required?