我RouteConfig
在包中创建了一个类,app.config
如下所示:
public class RouteConfig extends AbstractRouteConfig {
@Override
public void init(AppContext appContext) {
route("/{controller}/{aut_id}/").to(AuthorsController.class).action("findById");
}
我创建了AppControllerConfig
类:
package app.config;
import app.controllers.CatchAllFilter;
import app.controllers.api.v2.AuthorsController;
import org.javalite.activeweb.AbstractControllerConfig;
import org.javalite.activeweb.AppContext;
import org.javalite.activeweb.controller_filters.DBConnectionFilter;
public class AppControllerConfig extends AbstractControllerConfig {
public void init(AppContext context) {
add(new DBConnectionFilter(), new CatchAllFilter()).to(AuthorsController.class);
}
}
我还定义APIController
了类如下:
package app.controllers;
import org.javalite.activeweb.AppController;
public abstract class APIController extends AppController {
@Override
protected String getContentType() {
return "application/json";
}
@Override
protected String getLayout() {
return null;
}
}
AuthorsController
app.controllers.api.v2
包装内:
import app.controllers.APIController;
import app.models.Author;
public class AuthorsController extends APIController {
public void findById() {
if (blank("aut_id")) {
throw new RuntimeException("aut_id number is mandatory but was empty or null");
} else {
Author author = Author.findById(param("aut_id"));
String jsonResponse = author.toJson(false);
respond(jsonResponse);
}
}
}
尝试访问 urlhttp://localhost:8080/api/v2/authors/9
时,出现错误:
Request properties: Request URL: http://localhost:8080/api/v2/authors/9
ContextPath:
Query String: null
URI Full Path: /api/v2/authors/9
URI Path: /api/v2/authors/9
Method: GET
Request parameters: {}
Request headers: {Cookie=_ga=GA1.1.1833610632.1527846931; JSESSIONID=node03k88mhw4nihozrzi9ehiiadj0.node0, Cache-Control=no-cache, Accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8, Upgrade-Insecure-Requests=1, Connection=keep-alive, User-Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36, Host=localhost:8080, Pragma=no-cache, Accept-Encoding=gzip, deflate, br, Accept-Language=en,fr;q=0.9,ru;q=0.8}
org.javalite.activeweb.ActionNotFoundException: java.lang.NoSuchMethodException: app.controllers.api.v2.AuthorsController.9(); app.controllers.api.v2.AuthorsController.9()
[qtp1987707214-16] WARN ParamCopy - found 'session' value set by controller. It is reserved by ActiveWeb and will be overwritten.
[qtp1987707214-16] INFO FreeMarkerTemplateManager - rendering template: '/system/404' with layout: '/layouts/default_layout', session: node018slc2f7n5p0v67173ezr8guc0
[qtp1987707214-16] WARN FreeMarkerTemplateManager - Current location: /Users/Serguei/projects/java/newton-interventions
[qtp1987707214-16] ERROR RequestDispatcher - ActiveWeb internal error:
org.javalite.activeweb.ViewMissingException: Failed to render template: '/system/404.ftl', with layout: '/layouts/default_layout'; Template "/system/404.ftl" not found.
我究竟做错了什么 ?我什至没有输入AuthorsController
......它似乎忽略了我的路线定义并试图找到以下路线:
"method":"GET","action":"9","error":"java.lang.NoSuchMethodException: app.controllers.api.v2.AuthorsController.9()
在同一个控制器中声明index
动作时,如下所示:
public void index() {
final String json = Author.findFirst("AUT_ID = 9").toJson(false);
respond(json);
}
并击中http://localhost:8080/api/v2/authors
,它的工作原理。