无法从Spring RestController获取POST数据

问题描述 投票:1回答:1

我无法让Spring获取POST数据。 Controller应该获取字符串然后回显。但是,我得到了

响应:echo:null

在main()方法

我该怎么做才能解决这个问题?

RestController

@RestController
@RequestMapping("/")
public class HelloWorldController {

    @RequestMapping(method = RequestMethod.GET)
    public String get() {
        return "test get method";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String post(String string) {
        return "echo: " + string;
    }
}

测试POST功能

public static void main(String[] args) {
    String urlString = "http://localhost/Test/";
    try{
        Gson gson = new Gson();
        Testz test = new Testz();
        test.setZ("zzzzzzzzzzzzzzzzz");
        test.setCrap("rawrrr!!");
        String urlParameters = gson.toJson(test);
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);
        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setInstanceFollowRedirects(false);
        conn.setRequestMethod("POST");
        conn.setUseCaches(false);
        try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {
            wr.write(postData);
        } catch (Exception e) {
            e.printStackTrace();
        }

        InputStream inputStream = conn.getInputStream();
        byte[] available = new byte[inputStream.available()];
        inputStream.read(available);

        System.out.println("response: " + new String(available));
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

class Testz {
    private String z = null;
            public void setZ(String z){this.z = z;}
            public String getZ(){return z;}
    private String crap = null;
            public void setCrap(String crap){this.crap = crap;}
            public String getCrap(){return crap;}
}
java spring spring-mvc
1个回答
3
投票

尝试添加@RequestBody注释:

public String post(@RequestBody String string) {

它应该像魅力一样工作。

© www.soinside.com 2019 - 2024. All rights reserved.