我使用Jersey网站上的一个示例在NetBeans JEE 8.1中构建了一个简单的测试项目。我可以附加调试器并观察正在执行的服务代码并生成带有JSON内容的CREATED响应。发送到浏览器的是404而不是响应。我已经简化了服务代码以消除除REST相关线之外的其他问题。该应用程序的代码是:
package com.domenix.resttestproject;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
/**
*
* @author tswanson
*/
@ApplicationPath("/test")
public class TestApplication extends Application
{
/**
*
* @return
*/
@Override
public Set<Class<?>> getClasses()
{
final Set<Class<?>> retValue = new HashSet<Class<?>>();
retValue.add( SvcsService.class );
return( retValue );
}
}
该服务的代码是:
package com.domenix.resttestproject;
import javax.json.Json;
import javax.json.JsonObjectBuilder;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import java.util.concurrent.atomic.AtomicInteger;
import javax.json.JsonObject;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response.ResponseBuilder;
/**
*
* @author tswanson
*/
@Path("/svcs")
public class SvcsService
{
AtomicInteger idGen = new AtomicInteger(1);
@Path("/create")
@Consumes("application/x-www-form-urlencoded")
@Produces("application/json")
public Response createUser( @FormParam("userid") String userId ,
@FormParam("password") String pwd ,
@FormParam("role") String role )
{
JsonObjectBuilder bldr = Json.createObjectBuilder();
JsonObject resp = bldr.add( "userIdx" , idGen.getAndIncrement() )
.add( "userName" , userId )
.add( "pwd" , pwd )
.add( "role" , role ).build();
ResponseBuilder respBldr = Response.ok( resp.toString() ,
MediaType.APPLICATION_JSON_TYPE );
respBldr.status( HttpServletResponse.SC_CREATED );
Response myResp = respBldr.build();
return( myResp );
}
}
web.xml文件是:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>REST Test</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Register resources and providers under com.vogella.jersey.first package. -->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.domenix.resttestproject.TestApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
index.html文件是:
<html>
<head>
<title>Data Service Testing</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div>
<p>
<form id="createuser" action="test/svcs/create" method="POST">
<fieldset>
<legend>Create a new user</legend>
<label for="userid"><b>Userid:</b> </label>
<input id="userid" name="userid" type="text" placeholder="Required" maxlength="32" autofocus required><br><br>
<label for="password"><b>Password:</b> </label>
<input id="password" name="password" type="password" pattern="[a-zA-Z0-9_-$&@#%!]{8,20}" maxlength="20" placeholder="8-20 characters" required><br><br>
<label for="usertypes"><b>Type:</b> </label>
<select id="usertypes" name="role" required>
<option value="Student" selected>Student</option>
<option value="Business">Business</option>
</select><br><br>
<input id="submitbutton" type="submit" value="Submit">
</fieldset>
</form><br><br>
<form id="loginuser" action="test/svcs/login" method="POST">
<fieldset>
<legend>Login as a user</legend>
<label for="loginid"><b>Userid:</b> </label>
<input id="loginid" name="UserID" type="text" placeholder="Required" maxlength="32" autofocus required><br><br>
<label for="loginpwd"><b>Password:</b> </label>
<input id="loginpwd" name="Password" type="password" pattern="[a-zA-Z0-9_-$&@#%!]{8,20}" maxlength="20" placeholder="8-20 characters" required><br><br>
<input id="submitlogin" type="submit" value="Submit">
</fieldset>
</form>
</div>
</body>
</html>
映射中似乎缺少某些东西,它是什么?
感谢。