使用getModel的问题

我在做restful api项目,因为前端传来的参数太多,我使用了getModel方法

贴上代码controller

blob.png

model

blob.png

测试传参

blob.png

结果,令我费解的是它同时执行了一个save方法

blob.png

然后报错

三月 25, 2017 11:23:00 上午 com.jfinal.core.ActionHandler error

严重: /management/save

com.jfinal.render.RenderException: java.lang.RuntimeException: File not found : D:\myeclipseWorkspace\inventory_system\WebRoot/management/index.html

at com.jfinal.render.TemplateRender.render(TemplateRender.java:63)

at com.jfinal.core.ActionHandler.handle(ActionHandler.java:99)

at com.jfinal.core.ActionHandler.handle(ActionHandler.java:91)

at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:74)

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)

at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)

at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)

at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)

at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)

at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)

at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)

at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)

at org.eclipse.jetty.server.Server.handle(Server.java:365)

at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)

at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:937)

at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:998)

at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:856)

at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)

at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)

at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)

at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)

at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)

at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)

at java.lang.Thread.run(Thread.java:745)


我找了一遍项目,我确认没有设置其他拦截器,然后我找了一下Restful.class,不是看得太懂,好像是post会转到controllerKey + "/save"。

然后我重新创建了一个名为save得方法

blob.png

但是结果却是:警告: 404 Not Found: /supplier/save

我该怎么解决它?

评论区

JFinal

2017-03-25 11:57

去掉 Restful 拦截器,这个拦截器实现了 Roy Fielding 博士论文上建议的 url 风格,比较死板,有一些执行上的约定,为了实现这种风格,restful 拦截器会在服务端做转发,从而也就会在控制台输出中看到多个 action 调用

去掉以后完全按照 jfinal url 风格来走,整个世界清静了

JFinal

2017-03-25 11:58

此外,如果是做纯 json 服务端,在传参时可以去掉 modelName 前缀,这样来用:
1:客户端将 model.field 改为 field 参数形式
2:服务端使用 getModel(model.class, "")

如果没有创建 model , 还可以使用 getBean(...) ,极为方便

liangjiang

2017-03-25 14:32

@JFinal 去掉restful拦截器可以了,谢谢

linuxea

2017-03-25 18:43

@JFinal 在用this.getModel的时候,然后直接save,比如数据库的id是Int,而this.getModel中封装的id却是string,我只能单独把某些字段用this.getPara获取,再转换成正确的数据类型,set到model里面再保存。请问是不是有其他的方法?我这个感觉不是很方便。谢谢

JFinal

2017-03-25 20:54

@linuxea id 在数据库表中是什么类型,怎么在 model 中会是 String 呢? 你用的什么数据库?

linuxea

2017-03-26 13:40

@JFinal 我用的是mysql数据,在做数据库记录更新时需要有个id,页面直接以model.field的形式传过来,我记得是异常是string转int异常。

linuxea

2017-03-26 13:50

@JFinal 前台是用ajax发起,传递的参数都在data参数对象中。不是form action那种提交。会不会是这个原因呢?

JFinal

2017-03-26 17:11

@linuxea 先确定一下 model 中的 id 字段是什么类型? 如果数据表字段类型为 int 那就 model 中需要是 Integer 才正确,这一步先保障其正确性再往后走

热门反馈

扫码入社