2015-04-02 21 views
5

Tôi có điều khiển này vào mùa xuânXuân REST của bộ điều khiển yêu cầu bài

@RestController 
public class GreetingController { 

    @RequestMapping(value = "/greeting", method = RequestMethod.POST) 
    public String greeting(@RequestParam("uouo") String uouo) { 
     return uouo; 
    } 
} 

và khi tôi thử nghiệm nó

curl -k -i -X POST -H "Content-Type:application/json" -d uouo=test http://192.168.1.104:8080/api/greeting 

kết quả của thử nghiệm

HTTP Status 400 - chuỗi bắt buộc tham số ' uouo 'không phải là hiện tại

Tôi đã thử điều này, nhưng tôi nghĩ rằng @RequestParam không thể sử dụng cho POST nó luôn luôn thông qua các tham số trong URL bằng cách sử dụng GET, tôi sử dụng bài chỉ khi tôi đã có đối tượng JSON như tham số sử dụng @RequestBody, có cách nào để làm cho tham số chuỗi gửi bằng cách sử dụng POST?

Trả lời

6

Vùng chứa Servlet sẽ chỉ cung cấp thông số từ nội dung cho yêu cầu POST nếu loại nội dung là application/x-www-form-urlencoded. Nó sẽ bỏ qua cơ thể nếu loại nội dung là bất cứ điều gì khác. Đây là quy định trong Servlet Specification Chapter 3.1.1 When Parameters Are Available

Sau đây là những điều kiện phải được đáp ứng trước khi đăng bài dạng dữ liệu sẽ được áp dụng để thiết lập thông số:

  1. Yêu cầu là một HTTP hoặc HTTPS yêu cầu.
  2. Phương thức HTTP là POST.
  3. Loại nội dung là application/x-www-form-urlencoded.
  4. Servlet đã thực hiện cuộc gọi đầu tiên của bất kỳ nhóm nào trong số các đối tượng yêu cầu getParameter.

Nếu điều kiện không được đáp ứng và các dữ liệu bài mẫu không được bao gồm trong bộ thông số, dữ liệu bài vẫn phải có sẵn cho các servlet qua input stream đối tượng yêu cầu của. Nếu các điều kiện được đáp ứng , dữ liệu biểu mẫu bài đăng sẽ không còn có sẵn để đọc trực tiếp từ luồng đầu vào của đối tượng yêu cầu.

Vì bạn đang không gửi bất kỳ JSON, chỉ cần đặt các loại nội dung phù hợp

curl -k -i -X POST -H "Content-Type:application/x-www-form-urlencoded" -d uouo=test http://192.168.1.104:8080/api/greeting 

hoặc để curl suy luận nó

curl -k -i -X POST -d uouo=test http://192.168.1.104:8080/api/greeting?uouo=test 

Lưu ý rằng bạn vẫn có thể vượt qua các tham số truy vấn trong URL

curl -k -i -X POST -H "Content-Type:application/json" http://192.168.1.104:8080/api/greeting?uouo=test 
Các vấn đề liên quan