2013-06-21 40 views
7

Làm cách nào tôi có thể đặt mã trạng thái HTTP một cách thuận tiện trong trình xử lý yêu cầu Spring MVC?Điều kiện thiết lập trạng thái HTTP mà không cần thao tác trực tiếp HttpServletResponse

Tôi có trình xử lý yêu cầu phản hồi yêu cầu POST, để tạo tài nguyên mới. Nếu yêu cầu hợp lệ, tôi muốn nó chuyển hướng đến URI của tài nguyên mới, trả lại mã trạng thái HTTP (Tạo). Nếu yêu cầu không hợp lệ Tôi muốn nó để cung cấp cho người dùng một cơ hội để sửa lỗi theo hình thức gửi, và không nên đưa ra một mã trạng thái của 201.

@RequestMapping(value = { "/myURI/" }, method = RequestMethod.POST) 
public String processNewThingForm(
    @ModelAttribute(value = "name") final String name, 
    final BindingResult bindingResult) { 

    myValidator.validate(name, bindingResult); 

    if (!bindingResult.hasErrors()) { 
    getService().createThing(name); 
    return "redirect:" + name; 
    } else { 
    return "newThingView"; 
    } 

}

Nhưng điều đó không cho trạng thái phản hồi chính xác cho trường hợp chuyển hướng.

Tôi không thể chỉ cần thêm @ResponseStatus, bởi vì có hai trạng thái có thể. Tôi hy vọng có một cách neater hơn manually manipulating the HttpServletResponse. Và tôi muốn chỉ định tên chế độ xem để sử dụng, vì vậy tôi không thể have the request handler return a ResponseEntity object with the status set appropriately.

Trả lời

3

Trong trường hợp bạn muốn mã phản hồi 201, bạn có thể trả lại ResponseEntity với HttpStatus.CREATED khi tài nguyên được tạo và tên chế độ xem khác. Nếu vậy, bạn không thể sử dụng chuyển hướng (http mã 301). Xem RedirectView.

+0

"Nếu có, bạn không thể sử dụng chuyển hướng" Tôi biết. Đó là điểm của câu hỏi của tôi – Raedwald