반응형
@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
반응형
'programing' 카테고리의 다른 글
Mongodb는 오늘 날짜별로 생성된 결과를 찾습니다. (0) | 2023.06.23 |
---|---|
전체 iOS 앱의 기본 글꼴을 설정하시겠습니까? (0) | 2023.06.23 |
'ObjectId' 개체에 'getTimeStamp' 특성이 없습니다. (0) | 2023.06.23 |
각 값은 한 열에 몇 번 표시됩니까? (0) | 2023.06.23 |
gdb - 파이프를 사용한 디버깅 (0) | 2023.06.23 |