Tag: jersey 2.0

如果接收到无效的JSon,则不会调用ExceptionMapper

我使用Jersey 2.5.1和Jackson 2.2。 用于构建JSON Rest Web服务。 我有点了,并且运行了2个ExceptionMappers但是对于“not-json”请求,应用程序没有抛出任何exception! ExceptionMapper如果抛出NullPointerException,将调用它 如果JSon Mapping出现问题,将调用ExceptionMapper 我的问题:1。请求正文:{}工作2.请求正文:{}与应用程序端NullPointer调用第一个exception映射器3.请求正文:“jibberish”不调用任何东西(没有被任何ExceptionMapper捕获)导致没有exception被抛出。 不幸的是,响应主体是这样的:无法识别的字段“xxx”(类com.sample.MyDto),未标记为可忽略(9个已知属性……)但我想自定义错误消息,因为我总是返回一个JSon对象。

使用Jersey中的配置属性

我使用java / jetty自托管服务器和jersey-2 for java RESTful api。 Application具有带有属性的application.properties文件。 ConfigurationProperties类读取属性文件并将其加载到java.util.Properties类中。 Jetty服务器实例化以下列方式完成。 // Create and register resources final ResourceConfig resourceConfig = new ApiServiceConfig() .register(new DependencyInjectionBinder()); ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); contextHandler.setContextPath(“/mydomain/api”); Server jettyServer = new Server(8585); jettyServer.setHandler(contextHandler); ServletHolder jerseyServlet = new ServletHolder(new ServletContainer(resourceConfig)); contextHandler.addServlet(jerseyServlet, “/*”); // Create web context. Can’t use. //WebApplicationContext webContext = getWebApplicationContext(); // Add […]

Jersey,Jackson和JAX-RS POST多种JSON格式

我试图能够定义以下代码: public class MyObject { private String name; … // Other attributes } @Path(…) @Stateless public class MyRestResource { @POST @Consumes(MediaType.APPLICATION_JSON) public Response create(List myObjects) { // Do some stuff there } } 我知道我需要使用: DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true 正确设置我的对象映射器,以便能够在我的其余资源上接受单个值作为数组。 我成功地设置了那个部分。 我对这种方法的问题是以下内容不可区分: { “name”: “a name”, … // other attributes } 和 [{ “name”: “a name”, … // […]

Dropwizard仅在@POST上validation字段

我有这些只读字段需要安全,如密码。 假设我们有一个用户对象: public class User { @NotEmpty @Size(max = 100) private String name; @NotEmpty private String username; @NotEmpty @Email private String email; private String password; @JsonIgnore public String getPassword() { return password; } @JsonProperty public void setPassword(String password) { this.password = password; } } 所以,这很好用; 就像我可以得到/发布/放置任何我想要的,但我永远不会收到密码。 但我也想确保第一次发布时,密码不应为空。 如果我做 @NotEmpty private string password; 如果我不想更改此用户的密码,那么我的PUT(编辑)请求将失败,并显示validation错误。 我能想到两种解决方案: 1-inheritanceUser类,只为POST创建一个特殊的类,它可以在getter上有@NotEmpty注释。 […]

Jersey2,Hk2dependency injection(自动)给出AbstractMethodError:org.jvnet.hk2.internal.DynamicConfigurationImpl.addIdempotentFilter

坚持这个问题一段时间。 我正在尝试集成Tomcat 9,JDK 10,Jersey 2.23,HK2(用于DI)以及自动dependency injection。 我已经按照本教程 ,但得到以下错误,我搜索了很多,但没有找到任何东西。 我已经使用依赖来生成“META-INF / hk2-locator / default”,它正在生成。 依赖 org.glassfish.hk2 hk2-metadata-generator 2.4.0 错误堆栈 SEVERE: Servlet [MyApplication] in web application [/javaeeLearning] threw load() exception java.lang.AbstractMethodError: org.jvnet.hk2.internal.DynamicConfigurationImpl.addIdempotentFilter([Lorg/glassfish/hk2/api/Filter;)V at org.glassfish.hk2.utilities.ServiceLocatorUtilities.addClasses(ServiceLocatorUtilities.java:451) at org.glassfish.hk2.utilities.ServiceLocatorUtilities.enablePerThreadScope(ServiceLocatorUtilities.java:107) at org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:141) at org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.java:123) at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:330) at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:392) at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177) at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369) at javax.servlet.GenericServlet.init(GenericServlet.java:158) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1124) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1079) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:971) at […]

找不到媒体类型= application / json的MessageBodyWriter

我已经尝试了一切……无法弄清楚为什么我会得到这个例外。 有趣的是,在我的IDE(Intellij)中,一切都顺利进行。 无法弄明白……放弃。 你们有什么建议吗? dependencies { compile group: ‘com.amazonaws’, name: ‘aws-java-sdk’, version: ‘1.10.27’ compile group: ‘org.slf4j’, name: ‘slf4j-api’, version: ‘1.7.7’ compile group: ‘ch.qos.logback’, name: ‘logback-classic’, version: ‘1.1.2’ compile group: ‘ch.qos.logback’, name: ‘logback-core’, version: ‘1.1.2’ compile group: ‘org.glassfish.jersey.media’, name: ‘jersey-media-json-jackson’, version: ‘2.22.1’ compile group: ‘org.glassfish.jersey.containers’, name: ‘jersey-container-grizzly2-http’, version: ‘2.22.1’ compile group: ‘org.glassfish.jersey.core’, name: ‘jersey-client’, version: ‘2.22.1’ […]

如何使用Jersey 2.5将参数传递给REST资源

我有一个服务于我的客户端的Java服务器(非应用程序服务器)。 现在我有兴趣添加REST支持。 我初始化了Jetty服务器并创建了一些REST资源。 我的问题是: 如何在创建REST资源时传递参数? 通常我更喜欢每个资源的构造函数,但我不控制它。 我知道有一种方法可以注入依赖项。 如何使用Jersey 2.5? 谢谢!

Jersey – 在调用context.proceed()之前获取Interceptor中OutputStream的内容

在Jersey中使用Interceptor我可以操作Output,但是,我还想在响应中添加一个Header,该值是根据输出结果计算出来的。 @Sha256Sum public class Sha256SumInterceptor implements WriterInterceptor { public static final String SHA256_HASH_HEADER_NAME = “SHA256-SUM”; @Override public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException { // Retrieve the OutputStream, read the contents and calculate the hashsum. // Set the header value in context. context.proceed(); } } 但问题是,当我最终读完整个流时,我无法设置标题,因为调用了context.proceed并写入了内容(从而使我能够用它做任何事情)我再也无法设置标题。 简而言之我的问题:如何将整个流输出捕获为byte [],从字节数组计算结果,最后在对计算结果的响应中设置标头? 我不想耗尽输出流。

无法获得json的所有值

我试图使用rest webservice将从数据库获取的值返回到前端视图,但问题是它只返回json值的一行(第一行) 我有这样的json: {“jobName”:”NASA Scientist”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”Sample 2″,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} {“jobName”:”NASA Scientist”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”JOB_DESCRIPTION”,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} {“jobName”:”Web developer”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”XYZ 123″,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} {“jobName”:”Web developer”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”JOB_DESCRIPTION”,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} {“jobName”:”Programmer”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”JOB_DESCRIPTION”,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} {“jobName”:”Programmer”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”JOB_DESCRIPTION”,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} 它只将第一行json值返回到前端而不是全部。 我将从数据库中获取的值添加到List并在webservice中公开它,如下所示: public class FetchJobSummaryDAO { public List getJobSummaries() { JobSummaries jobSummaries = new JobSummaries(); List jobSummaryList = new ArrayList(); try { Connection con = DBConnection.getConnection(); String query = “select JOB_NAME,JOB_DESCRIPTION,JOB_ROLE,JOB_PRIMARY_SKILL,JOB_DESIGNATION,JOB_EXP,JOB_SAL_RANGE, JOB_POSTEDBY from TBL_JOBPOSTING”; PreparedStatement pst = con.prepareStatement(query); ResultSet rs […]

在Jersey Client 2中编码花括号

我们正在使用Jersey Client 2.21。 我注意到,当我们将花括号(又名花括号)作为参数值时,它不会被正确编码。 不仅如此,花括号内的任何内容都不会被编码。 对于我测试过的常规括号或其他不安全字符,情况并非如此。 请参阅下面的示例。 在这个例子中,我输入三个参数。 一个只有空格的控制参数。 一个用花括号,一个用常规括号。 public static void testJerseyEncoding() { Client client = ClientBuilder.newClient(); String url = “http://foo.com/path”; Map map = new HashMap(); map.put(“paramWithCurly”, ” {with a space}”); map.put(“paramWithOutCurly”, “with a space”); map.put(“paramWithBracket”, “[with a space]”); WebTarget target = client.target(url); for (Map.Entry entry : map.entrySet()) { target = target.queryParam(entry.getKey(), entry.getValue()); […]