ZK 框架与 Jersey
ZK framework with Jersey
当我向服务器发出请求时,我的 ZK 项目没有看到 Jersey MessageBodyWriter。
Client client = ClientBuilder.newClient();
WebTarget baseTarget = client.target("target");
Response postResponse = baseTarget.request().post(Entity.text(transaction));
添加到 web.xml:
<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>ua.sustavov.payment.service, org.codehaus.jackson.jaxrs</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
MessageBodyWriter:
@Provider
@Produces(MediaType.TEXT_PLAIN)
public class TransactionMessageBodyWriter implements MessageBodyWriter<Transaction> {
@Override
public boolean isWriteable(Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType) {
return Transaction.class.isAssignableFrom(aClass);
}
@Override
public void writeTo(Transaction transaction, Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> multivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException {
outputStream.write(transaction.toString().getBytes());
}
@Override
public long getSize(Transaction transaction, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
return -1;
}
我什么时候发送请求?我的应用程序没有看到 MessageBodyWriter
谢谢!
编写器不会被 Client
自动拾取,就像在服务器端(当包扫描时)一样。您需要明确注册它
Client client = ClientBuilder.newClient();
client.register(TransactionMessageBodyWriter.class);
或者您甚至可以使用 WebTarget
进行注册
WebTarget baseTarget = client.target("target");
baseTarget.register(TransactionMessageBodyWriter.class);
当我向服务器发出请求时,我的 ZK 项目没有看到 Jersey MessageBodyWriter。
Client client = ClientBuilder.newClient();
WebTarget baseTarget = client.target("target");
Response postResponse = baseTarget.request().post(Entity.text(transaction));
添加到 web.xml:
<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>ua.sustavov.payment.service, org.codehaus.jackson.jaxrs</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
MessageBodyWriter:
@Provider
@Produces(MediaType.TEXT_PLAIN)
public class TransactionMessageBodyWriter implements MessageBodyWriter<Transaction> {
@Override
public boolean isWriteable(Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType) {
return Transaction.class.isAssignableFrom(aClass);
}
@Override
public void writeTo(Transaction transaction, Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> multivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException {
outputStream.write(transaction.toString().getBytes());
}
@Override
public long getSize(Transaction transaction, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
return -1;
}
我什么时候发送请求?我的应用程序没有看到 MessageBodyWriter 谢谢!
编写器不会被 Client
自动拾取,就像在服务器端(当包扫描时)一样。您需要明确注册它
Client client = ClientBuilder.newClient();
client.register(TransactionMessageBodyWriter.class);
或者您甚至可以使用 WebTarget
WebTarget baseTarget = client.target("target");
baseTarget.register(TransactionMessageBodyWriter.class);