The method handleMethodArgumentNotValid
worked with a @RequestBody
from postman body but not work without @ResponseBody from postman params.
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {
Map<String, List<String>> map = new HashMap<>();
List<String> errors = ex.getBindingResult()
.getFieldErrors()
.stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.toList());
map.put("message", errors);
return new ResponseEntity<>(map, HttpStatus.BAD_REQUEST);
}
}
@RestController
public class UserController {
@PostMapping(value = "create")
public ResponseEntity<?> signup(@Valid SignupRequest request) {
map = new HashMap<>();
map.put("status", messageSource.getMessage("result.ng"));
return new ResponseEntity<>(map, HttpStatus.BAD_REQUEST);
}
}
how to solve to work from postman params to get only the default message?