我在弹簧控制器中有一个方法
@OneToOne(mappedBy='...')
我希望@GetMapping
public ResponseEntity<RetailerCandidateFormResponse> getRetailerCandidateForm(
@RequestParam String a, @RequestParam String b, @RequestParam String c) {
//Method body goes here
}
是强制性的,这可以通过@Requestparam A a
或保持原样来实现,这是@Requestparam(required=true) A a
注释的默认行为。
但是,如果我想强制使用@Requestparam
或@RequestParam String b
中的任何一个,即如果请求中包含@RequestParam String c
,则不必存在@RequestParam String b
,反之亦然,但是两者不能同时为@RequestParam String c
。如何在控制器级别上实现这一目标?
在方法主体内部,我可以编写此null
逻辑并在两个参数均为if-else-if
时引发异常,但是,我不想这样做。
答案 0 :(得分:1)
您可以使用@ModelAttribute从类获取请求参数。
您的网址将是:?a=&b=&c=
这是个安慰:
在控制器类之前使用@Validated。
@GetMapping
public ResponseEntity<RetailerCandidateFormResponse> getRetailerCandidateForm(
@Valid @ModelAttribute ReqParam reqParam) {
//Method body goes here
}
请求类:
public class ReqParam implements Serializable {
private static final long serialVersionUID = 1L;
@NotEmpty(message = "A can not be null")
private String a;
private String b;
private String c;
@AssertTrue(message = "B or c need to be present")
public boolean isValid() {
if (b == null) {
return c != null;
}
if (c == null) {
return b != null;
}
return true;
}
//getter seeter
}