如何使任何一个请求参数都必须为NULL,但不能同时为两者?

时间:2018-07-23 10:24:28

标签: spring spring-mvc spring-boot controller

我在弹簧控制器中有一个方法

@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时引发异常,但是,我不想这样做。

1 个答案:

答案 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
}