2016-05-07 2 views
2

Wenn in der Steuerung des springmvc Projektes beschäftigen, ist der Code:Wie mit dem @RequestParam (required = true) besser

@Controller 
@RequestMapping("/detail") 
public class FileDetailController { 
    @RequestMapping("/add_detail") 
    @ResponseBody 
    public Object addDetailWithVersionId(@RequestParam(required=true)String versionId, 
     String description) { 

     if(hasVersion(versionId)) { 
      FileDetail fileDetail = new FileDetail(); 
      fileDetail.setId(UUIDUtil.getUUID()); 
      fileDetail.setDescription(description); 
      fileDetail.setVersionId(versionId); 
      // detailService.insert(fileDetail); 
      return JsonUtil.SUCCESS; 
     } 
     return JsonUtil.ERROR; 
    } 

in meinem Browser, I-Eingang http://localhost:8080/file_server/detail/add_detail und dann Meldung: HTTP Status 400 - Required String parameter 'versionId' is not present. Oh, der Code @RequestParam(required=true)String versionId spielte eine Rolle in. Aber gibt es eine geeignete Methode, zurück json zum Front-End in diesem Fall?

+0

Sie sollten Ihren Frontend-Code schreiben. – Mippy

Antwort

1

(Option 1) Wenn Sie Rückkehr zum Frontend ändern möchten, können Sie benutzerdefinierte mit org.springframework.boot.autoconfigure.web.ErrorController

Zum Beispiel implementieren können:

@RestController 
public class MyErrorController extends AbstractErrorController { 

    private static final String PATH = "/error"; 

    @Autowired 
    public MyErrorController(ErrorAttributes errorAttributes) { 
     super(errorAttributes); 
    } 

    @RequestMapping(value = PATH) 
    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) { 
     Map<String, Object> body = getErrorAttributes(request, false); 
     HttpStatus status = getStatus(request); 
     return new ResponseEntity<Map<String, Object>>(body, status); 
    } 

    @Override 
    public String getErrorPath() { 
     return PATH; 
    } 

} 

Sie werden jetzt immer so etwas wie dieses json erhalten:

{ 
    "timestamp": 1462600073772, 
    "status": 400, 
    "error": "Bad Request", 
    "exception": "org.springframework.web.bind.MissingServletRequestParameterException", 
    "message": "Required String parameter 'versionId' is not present", 
    "path": "/add_detail" 
} 

kann anpassen, was auch immer Sie möchten, wenn Sie möchten. Ändern Sie einfach die Fehlermethode im Controller.


(Option 2) Verwenden Sie benutzerdefinierte @ExceptionHandler in dem Controller. Kann dieses Add für weitere Informationen lesen https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

Genau so etwas in Ihrem FileDetailController

@Autowired 
private ErrorAttributes errorAttributes; 

@ExceptionHandler(MissingServletRequestParameterException.class) 
public ResponseEntity<Map<String, Object>> handle(HttpServletRequest request, Exception exception) { 
    RequestAttributes requestAttributes = new ServletRequestAttributes(request); 
    Map body = this.errorAttributes.getErrorAttributes(requestAttributes,false); 

    return new ResponseEntity<Map<String, Object>>(body, HttpStatus.BAD_REQUEST); 
} 
Verwandte Themen