将数据从 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的主要内容,如果未能解决你的问题,请参考以下文章