programing

@RequestParams가 비어 있지 않은지 확인하려면 어떻게 해야 합니까?

subpage 2023. 6. 23. 22:09
반응형

@RequestParams가 비어 있지 않은지 확인하려면 어떻게 해야 합니까?

저는 사용자로부터 연산 유형, num1, num2를 받는 계산기 서비스를 가지고 있습니다.사용자가 실제로 이러한 값을 입력하고 공백으로 두지 않는지 확인해야 합니다.

@RequestMapping(value = "/calculate")
@ResponseBody
public CalculationResult calculate(@RequestParam(name = "op") String operation, @RequestParam(name = "num1") Double num1, @RequestParam(name = "num2") Double num2) {
    System.out.print("Operation:" + operation);
    Double calculate = calculatorService.calculate(operation, num1, num2);
    return new CalculationResult(calculate);
}

현재 오류로 인해 실패하고 있기 때문에 합격해야 하는 통합 테스트가 있습니다.

{\"타임스탬프\":1488875777084,\"상태\":400,\"오류\":\"잘못된 요청\",\"예외\":\" springframework.web.web.web.discovery.discovery.메서드 인수TypeMismatchException\",\"message\":\"java.lang 유형의 값을 변환하지 못했습니다.string'은(는) 필수 형식 'java.lang'입니다.이중';

테스트 사례는 다음과 같습니다.

@Test
public void validates_all_parameters_are_set() throws Exception {
    ResponseEntity<String> response = template.getForEntity( "/calculate?op=&num1=&num2=",
            String.class);
    assertThat(response.getStatusCode(), equalTo(HttpStatus.BAD_REQUEST));
    assertThat(response.getBody(), equalTo("{\"error\":\"At least one parameter is invalid or not supplied\"}"));
}

이것을 어떻게 확인해야 할지 모르겠습니다.

저는 여기서 오래 에 비슷한 문제에 대해 다음과 같이 답했습니다.

@Validated
public class CalculationController {

    @RequestMapping(value = "/calculate")
    @ResponseBody
    public CalculationResult calculate(
            @Valid @NotBlank @RequestParam(name = "op") String operation,
            @Valid @NotNull @RequestParam(name = "num1") Double num1,
            @Valid @NotNull @RequestParam(name = "num2") Double num2) {
        System.out.print("Operation:" + operation);
        Double calculate = calculatorService.calculate(operation, num1, num2);
        return new CalculationResult(calculate);
    }
}

해당 @Test는 다음과 같이 "may not be null" 메시지 배열을 테스트하도록 수정해야 합니다.

@Test
public void validates_all_parameters_are_set() throws Exception {
    ResponseEntity<String> response = template.getForEntity( "/calculate?op=&num1=&num2=",
                String.class);
    assertThat(response.getStatusCode(), equalTo(HttpStatus.BAD_REQUEST));
    assertThat(response.getBody(), equalTo("{\"error\":[\"may not be null\",\"may not be null\"]}"));
}

지금까지 값을 확인하지 않습니다. 코드를 다음으로 변경할 수 있습니다.

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

@RequestMapping(value = "/calculate")
@ResponseBody
public ResponseEntity<CalculationResult> calculate(@RequestParam(name = "op") String operation, 
    @RequestParam(name = "num1") Double num1, 
    @RequestParam(name = "num2") Double num2) {

    if(null == op || null == num1 || null == num2) {
        throw new IllegalArgumentException("{\"error\":\"At least one parameter is invalid or not supplied\"}")
    }

    System.out.print("Operation:" + operation);
    Double calculate = calculatorService.calculate(operation, num1, num2);

    return new ResponseEntity<>(new CalculationResult(calculate), HttpStatus.OK);
}    

@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public final String exceptionHandlerIllegalArgumentException(final IllegalArgumentException e) {
    return '"' + e.getMessage() + '"';
}
@RestController
@RequestMapping("/")
@Validated
public class Controller {
    @GetMapping("/endpoint")
    public String getEndpoint(@RequestParam @NotBlank String name) {}
}

언급URL : https://stackoverflow.com/questions/42643878/how-do-i-validate-that-the-requestparams-are-not-empty

반응형