java - 为什么我的 restful 服务 API 返回错误消息?
问题描述
我的代码如下:
package com.calltree_entries.restful;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.calltree_entries.CallTree;
import com.calltree_entries.Manual;
import com.calltree_entries.util.DbOp;
@Path("/ManualService")
public class ManualService {
private static final Logger logger = LogManager.getLogger(Class.class.getSimpleName());
@Path("/updateManuals")
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response updateManuals (@FormParam("callTreeEntryId") int callTreeEntryId,@FormParam("manuals") Manual[] manuals) throws Exception {
...................
}
这是手册源代码:
package com.calltree_entries;
public class Manual {
public static final int active=1;
public static final int inactive=0;
private int manualId;
private String manualLocation;
private String description;
private String lastUpdateDate;
public Manual() {
}
public int getManualId() {
return manualId;
}
public void setManualId(int manualId) {
this.manualId = manualId;
}
public String getManualLocation() {
return manualLocation;
}
public void setManualLocation(String manualLocation) {
this.manualLocation = manualLocation;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getLastUpdateDate() {
return lastUpdateDate;
}
public void setLastUpdateDate(String lastUpdateDate) {
this.lastUpdateDate = lastUpdateDate;
}
}
这是我的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>CallTreeAdmin</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>RestfulServices</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.calltree_entries.restful.CallTreeApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>RestfulServices</servlet-name>
<url-pattern>/RestfulServices/*</url-pattern>
</servlet-mapping>
</web-app>
这是 CallTreeApplication 源代码:
package com.calltree_entries.restful;
import org.glassfish.jersey.server.ResourceConfig;
import com.calltree_entries.Manual;
public class CallTreeApplication extends ResourceConfig {
public CallTreeApplication () {
packages("com.calltree_entries.restful");
register(Manual.class);
}
}
错误信息如下:
Validation of the application resource model has failed during application initialization.
[[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response
com.calltree_entries.restful.ManualService.updateManuals(int,com.calltree_entries.Manual[]) throws
java.lang.Exception at index 1.;
source='ResourceMethod{httpMethod=POST, consumedTypes=[application/json], producedTypes=
[application/json],
suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS,
invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class
com.calltree_entries.restful.ManualService,
handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@5155fae1]},
definitionMethod=public javax.ws.rs.core.Response
com.calltree_entries.restful.ManualService.updateManuals(int,com.calltree_entries.Manual[]) throws
java.lang.Exception, parameters=[Parameter [type=int, source=callTreeEntryId, defaultValue=null],
Parameter [type=class [Lcom.calltree_entries.Manual;, source=manuals, defaultValue=null]],
responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:371)
我试图改变函数声明如下:
@Path("/updateManuals")
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response updateManuals (@FormParam("callTreeEntryId") int callTreeEntryId,@FormParam("manuals") List<Manual> manuals) throws Exception {
然而,结果是一样的。
事实上,我并没有向 RESTful 服务提交文件。我只想将 1 个文本字段和一个数组对象提交给一个安静的服务。
在 tomcat 应用程序启动期间不会调用此 API。你能告诉我为什么tomcat应用程序启动时会弹出错误消息吗?然而,它
当我删除参数“@FormParam("manuals") Manual[] manuals”时,错误消息消失了,你能告诉我为什么吗?
解决方案
推荐阅读
- cuda - /usr/local 下的两个 CUDA 文件夹。我应该导出哪个?
- c# - 两个 ObservableCollections 的联合返回重复项
- python - 我无法在 Visual Studio Code 上格式化 Python 文件:“没有安装 'python' 文件的文档格式化程序。”
- html - 如何制作带有固定在引导程序 4 中的标题的卡
- javascript - javascript 计数当前 i 值与前一个循环输出值
- c# - 解析任何结构的json的通用方法(第n个深度)c#
- angular - 如何在 Storybook 中使用相对角度分量?
- excel - 在 Excel 的 Power Query 中通过 ODBC 连接连接时选择要连接的架构
- r - 如何将标签添加到 R 中的点?- 示例不起作用
- r - 是否有一个带有通用类 data.frame 的 R 包,其中列可以是数组(或者我如何定义这样的类)?