0

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?

David
  • 3
  • 2

0 Answers0