将数据从 POST Curl 插入 JAVA Spring

Posted

技术标签:

【中文标题】将数据从 POST Curl 插入 JAVA Spring【英文标题】:Insert Data from POST Curl to JAVA Spring 【发布时间】:2016-06-16 23:52:06 【问题描述】:

我有这个来自 php 的 json POST url'http://localhost:8080/demo/test'

'"postby_id":"1","title":"ftkjhg","is_private":"0","status":"1","post_type_id":"1","type":"2","p_id":"1","ve_id":"3","link":"1111111"'

我的网络控制器

    @RequestMapping(value = "/test", method = RequestMethod.POST)

    @ResponseBody
    void cremysqlCall() throws Exception 


        creativityService.creMysqlCall();

    

服务文件

public void creMysqlCall() throws Exception 
        creativityDao.creMysqlCall();
    

myDAO 文件

public void creMysqlCall() throws Exception 
        SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(masterJdbcTemplate).withTableName("posts")
                .usingColumns("postby_id","title","is_private","post_type_id","status","wall_type","p_id","ve_id","link");
        Map<String, Object> creInsertMap = Maps.newHashMap();
        creInsertMap.put("postby_id", "");
        creInsertMap.put("title", "");
        creInsertMap.put("is_private", "");
        creInsertMap.put("post_type_id", "");
        creInsertMap.put("status", "");
        creInsertMap.put("wall_type", "");
        creInsertMap.put("p_id", "");
        creInsertMap.put("ve_id", "");

        creInsertMap.put("link", "");

如何将数据从 URL 发布到这个 DAO 我是 java 新手,在此先感谢

更新

收到此错误

HTTP 错误 405 访问 /backend/test 时出现问题。原因: 不支持请求方法“GET”

使用 getter 和 setter 新建 Class 文件

public class MysqlCall 


    public Object is_private;
    public Object postby_id;
    public Object title;

    public Object getPostby_id() 
        return postby_id;
    

    public void setPostby_id(Object postby_id) 
        this.postby_id = postby_id;
    

    public Object getTitle() 
        return title;
    

    public void setTitle(String title) 
        this.title = title;
    

    public Object getIs_private() 
        return is_private;
    

    public void setIs_private(String is_private) 
        this.is_private = is_private;
    

    public Object getStatus() 
        return status;
    

    public void setStatus(String status) 
        this.status = status;
    

    public Object getPost_type_id() 
        return post_type_id;
    

    public void setPost_type_id(String post_type_id) 
        this.post_type_id = post_type_id;
    

    public Object getWall_type() 
        return wall_type;
    

    public void setWall_type(String wall_type) 
        this.wall_type = wall_type;
    

    public Object getPostto_id() 
        return postto_id;
    

    public void setPostto_id(String postto_id) 
        this.postto_id = postto_id;
    

    public Object getVertical_id() 
        return vertical_id;
    

    public void setVertical_id(String vertical_id) 
        this.vertical_id = vertical_id;
    

    public Object getLink() 
        return link;
    

    public void setLink(String link) 
        this.link = link;
    

    public Object status;
    public Object post_type_id;
    public Object wall_type;
    public Object postto_id;
    public Object vertical_id;
    public Object link;

新的 DAO

public void creMysqlCall(MysqlCall call) throws Exception 
        SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(masterJdbcTemplate).withTableName("posts")
                .usingColumns("postby_id","title","is_private","post_type_id","status","wall_type","postto_id","vertical_id","link");
        Map<String, Object> creInsertMap = Maps.newHashMap();
        creInsertMap.put("postby_id", call.postby_id);
        creInsertMap.put("title", call.title);
        creInsertMap.put("is_private", call.is_private);
        creInsertMap.put("post_type_id", call.post_type_id);
        creInsertMap.put("status", call.status);
        creInsertMap.put("wall_type", call.wall_type);
        creInsertMap.put("postto_id", call.postto_id);
        creInsertMap.put("vertical_id", call.vertical_id);
        creInsertMap.put("link", call.link);

服务文件

public void creMysqlCall(MysqlCall call) throws Exception 
    creativityDao.creMysqlCall(call);

控制器

// 用于测试服务调用的 API @RequestMapping(value = "/test", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)

void creMysqlCall(@RequestBody(required = true) MysqlCall call) 抛出异常

creativityService.creMysqlCall(call);

【问题讨论】:

使用 Postman 或 Advanced Rest Client 等工具(两者都有 chrome 扩展)。除非 API 接收到查询参数(用于 GET),否则您无法从浏览器的 URL 执行此操作。 【参考方案1】:

您需要使用 getter 和 setter 从 JSON 创建一个值对象类。

那么你的控制器会是这样的

@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
void creMysqlCall(@RequestBody(required = true) MysqlCall call) throws Exception 
   creativityService.creMysqlCall(call);

确保你的类路径中有 Jackson,所以在你的 pom 中

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.0</version>
</dependency>

【讨论】:

【参考方案2】:

这更像是一个 Spring MVC & Jackson 问题。 你必须创建一个类:

public class MysqlCall 
   private String postby_id;
   /* the rest of the fields in JSON */
   /* getters and setters */

然后使用@RequestBody注解进行映射:

@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Object creMysqlCall(@RequestBody(required = true) MysqlCall call) throws Exception 

    //creativityService.creMysqlCall(call);

    return call;

在 DAO 中,您只需将对象参数与​​ sql 映射链接。

【讨论】:

收到此错误 HTTP 错误 405 访问 /backend/test 时出现问题。原因:不支持请求方法“GET” 如果您发布了整个控制器和其他代码,那就太好了。这似乎是设置的问题。

以上是关于将数据从 POST Curl 插入 JAVA Spring的主要内容,如果未能解决你的问题,请参考以下文章

使用POST调用而不是使用curl将信息发送到服务器

将数据从存储过程插入临时表

使用POST方法将数据从表单插入mysql

如何将数据从代码插入 Db 并创建 POST 方法

PHP cURL无法向api发送POST请求

Curl和PHP - 如何通过PUT,POST,GET将json传递给curl