Ger*_*ert 3 junit jersey jackson
我正在开发一个轻量级服务器应用程序,其中包含一个使用Jersey 2.12和Jackson 2实现的RESTful api.
我在使用JUnit和JerseyTest开发时编写测试.我知道我的Jersey资源按预期工作,包括从JSON到JSON的编组,因为我使用PostMan Chrome插件手动测试它们.
基于Jersey文档中的示例,我的查询参数的GET测试也运行良好 这里是一个简化的(我已经省略了样板代码以使想法更清晰)我想写的测试示例:
import static org.junit.Assert.assertTrue;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import com.acme.api.rest.SessionsEndPoint;
import com.acme.api.rest.beans.UserCredentialsBean;
public class TestSession extends JerseyTest {
@Override
protected Application configure() {
return new ResourceConfig(SessionsEndPoint.class);
}
@Test
public void test() {
UserCredentialsBean userCredentialsBean = new UserCredentialsBean();
userCredentialsBean.setUserId("alice");
userCredentialsBean.setPassword("secret");
WebTarget theTarget = target("sessions/login");
Response response = theTarget.request().post( Entity.entity(UserCredentialsBean.class, "application/json"));
assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的基本问题是我找不到任何关于如何正确使用WebTarget类进行发布请求的文档.WebTarget theTarget构造正确但行:
Response response = theTarget.request().post( Entity.entity(UserCredentialsBean.class, "application/json"));
Run Code Online (Sandbox Code Playgroud)
不起作用.
据我所知,WebTarget类在JerseyTest框架中相当新.有没有人可以指出我最近的文档,示例,或者只是在这里解释如何让这个工作?
在我在这里发布我的问题之前,我确实做了很多谷歌搜索,但在检查后,我的眼睛突然落在这个相关问题上.我曾多次搜索SO,但从未发现过这个问题.无论如何,这是我的问题的解决方案:
我按照接受的答案开始实施,并让它快速完成.
然后我决定你应该可以避免使用JSON字符串表示,然后我就可以了.
上面的代码如果修改如下:
import static org.junit.Assert.assertTrue;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import com.acme.api.rest.SessionsEndPoint;
import com.acme.api.rest.beans.UserCredentialsBean;
public class TestSession extends JerseyTest {
@Override
protected Application configure() {
return new ResourceConfig(SessionsEndPoint.class);
}
@Test
public void test() {
UserCredentialsBean userCredentialsBean = new UserCredentialsBean();
userCredentialsBean.setUserId("alice");
userCredentialsBean.setPassword("secret");
LoginResponseBean loginResponseBean =
target("sessions/login")
.request(MediaType.APPLICATION_JSON_TYPE)
.post(
Entity.entity(
userCredentialsBean,
MediaType.APPLICATION_JSON_TYPE
),
LoginResponseBean.class
);
assertTrue(
loginResponseBean.isSuccess()
&&
loginResponseBean.getToken().length()==36
);
}
}
Run Code Online (Sandbox Code Playgroud)
LoginResponseBean是一个普通的Java Bean.只是getter和setter以及默认构造函数.
来自JSON的编组由框架完成,由moxy或jackson作为JSON提供者完成.
| 归档时间: |
|
| 查看次数: |
11685 次 |
| 最近记录: |