警告:HTTP GET方法public java.lang.String不应使用任何表单参数(UPDATED)



当我在Postman中执行getCustomers((方法时,我遇到了这个错误。问题是,由于某种原因,如果我取消注释的话,执行方法getOrder((而不仅仅是getCustomers((。我已经搜索了这个问题,但没有找到任何对我的情况有效的东西。任何帮助都将非常感激。

错误:

org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] A HTTP GET method, public java.lang.String com.something.JerseyProjectConnectionToDB.App.getOrder(java.lang.String), should not consume any form parameter.; source='ResourceMethod{httpMethod=GET, consumedTypes=[], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class com.something.JerseyProjectConnectionToDB.App, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@3ea75b05]}, definitionMethod=public java.lang.String com.something.JerseyProjectConnectionToDB.App.getOrder(java.lang.String), parameters=[Parameter [type=class java.lang.String, source=date, defaultValue=null]], responseType=class java.lang.String}, nameBindings=[]}']
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:371)
at org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$1(ApplicationHandler.java:293)
at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:232)
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:292)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:259)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:154)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:346)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1134)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1089)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:983)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4902)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5206)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
at java.util.concurrent.FutureTask.run(Unknown Source)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:843)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
at java.util.concurrent.FutureTask.run(Unknown Source)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)

App.java

@Path("/app")
public class App {
@GET
@Path("/getCustomers")
@Produces(MediaType.APPLICATION_JSON)
public List<CustomerPOJO> getCustomers() {
return CustomerDAO.getAllCustomers();
}
/*
@GET
@Path("/getOrder")
@Produces(MediaType.APPLICATION_JSON)
public String getOrder(@FormParam("date") String date){
return CustomerDAO.getOrder(date);
}
*/
}

客户DAO.java

public class CustomerDAO {
public static List<CustomerPOJO> getAllCustomers(){
List<CustomerPOJO> customerList = new ArrayList<CustomerPOJO>();
CustomerPOJO customer = null;
try(Connection conn = DBConnection.createNewDBconnection()){
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("Select * from customer");

while(rs.next()) {
customer = new CustomerPOJO();
customer.setCustomer_code(rs.getInt(1));
customer.setCustomer_name(rs.getString(2));
customer.setCustomer_adress(rs.getString(3));
customer.setCustomer_age(rs.getInt(4));
customerList.add(customer);
}
rs.close();
stmt.close();

} catch (SQLException e) {
logger.error(e);
}
return customerList;
}
public static String getOrder(String pattern){
List<OrderShipmentPOJO> orderList = new ArrayList<OrderShipmentPOJO>();
OrderShipmentPOJO order = null;

ObjectMapper objectMapper = new ObjectMapper();
String orderListToString = null;

SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy-MM-dd");
Date date = null;

try(Connection conn = DBConnection.createNewDBconnection()){
date = simpleDateFormat.parse(pattern); 
logger.info(date);

if(CheckDate.execute(date)) {
String query = "select customer.customer_name, product.product_title, order_shipment.order_datern"
+ "from customer, product, order_shipment, order_shipment_has_productrn"
+ "where order_shipment.order_code = order_shipment_has_product.order_code rn"
+ "and (order_shipment_has_product.product_code = product.product_codern"
+ "and (order_shipment.customer_code = customer.customer_codern"
+ "and (date(order_shipment.order_date) = '?')))";

PreparedStatement ps = conn.prepareStatement(query);
ps.setDate(1, (java.sql.Date) date);

ResultSet rs = ps.executeQuery();

while(rs.next()) {
order = new OrderShipmentPOJO();
order.setCustomer_name(rs.getString(1));
order.setProduct_title(rs.getString(2));
order.setOrder_date(rs.getDate(3));
orderList.add(order);
}
rs.close();
} else {
return "You have inserted a date that dont exist, try again";
}

orderListToString = objectMapper.writeValueAsString(orderList);

} catch (SQLException e) {
logger.error(e);
} catch (ParseException e) {
logger.error(e);
return "Unparseable using " + date + ". Use a format like this one: 2020-11-30";
} catch (JsonProcessingException e) {
logger.error(e);
}
return orderListToString;
}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app version="2.5" xmlns="http://JAVA.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.something.JerseyProjectConnectionToDB</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.something</groupId>
<artifactId>JerseyProjectConnectionToDB</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>JerseyProjectConnectionToDB</name>
<build>
<finalName>JerseyProjectConnectionToDB</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<inherited>true</inherited>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.29.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.29.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.29.1</version>
</dependency>
</dependencies>
</project>

我发现问题出在方法getOrder((上,所以我对它进行了评论,现在可以工作了。我现在的问题是,当我取消注释该方法并调用其他方法时,代码执行的是方法getOrder((,而不是我调用的方法,这可能是什么问题?

感谢您的帮助和时间^^

我已经找到了这个问题的解决方案。方法@GET不接受@FormParam,您只需要使用@QueryParam@PathParam。更多信息:https://stackoverflow.com/a/29789846/15633133

最新更新