Dropwizard. Send Json and make jersey + jackson recognize class
我是杰克逊和泽西的新手。已经完成了一些使用这些库的程序。但是我有一个问题我找不到解决方案。
1
2 3 4 5 6 7 8 |
这是在我的 ticketResource 课程中。我正在尝试将 json 从我的 web 应用程序发送到服务器。但我在尝试时只会出错。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$(‘#newTicketSubmit’).click(function () {
var jsonData = [ {‘topic’:$(‘#inputTopic’).val()}, {‘priority’:$(‘#inputPriority option:selected’).val()}, {‘assigned’:$(‘#inputAssign option:selected’).val()}, {‘text’:$(‘#inputText’).val()}, {‘solved’:0}, {‘date’:‘No date set’} ];
$.ajax({ |
这就是我的 javascript 文件的样子。它确实调用了服务器。但我不是 100% 确定我是否正确地做所有事情
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
public class Ticket {
public Ticket()
@Id @NotEmpty @NotEmpty @NotNull @NotNull @NotNull |
最后这里是我的 Ticket 类的片段
我希望我的项目了解的是,当我从 javascript 应用程序发送内容时。然后服务器将了解如何从该 json 数据创建 Ticket 类。如果我理解正确。这应该是可能的。但我以某种方式做错了什么。
任何可以带我走上正确道路的帮助都非常受欢迎
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
com.sun.jersey.spi.container.ContainerResponse: A message body writer for Java class io.dropwizard.jersey.errors.ErrorMessage, and Java type class io.dropwizard.jersey.errors.ErrorMessage, and MIME media type application/octet–stream was not found.
The registered message body writers compatible with the MIME media type are: */* -> com.sun.jersey.core.impl.provider.entity.FormProvider com.sun.jersey.server.impl.template.ViewableMessageBodyWriter com.sun.jersey.core.impl.provider.entity.StringProvider com.sun.jersey.core.impl.provider.entity.ByteArrayProvider com.sun.jersey.core.impl.provider.entity.FileProvider com.sun.jersey.core.impl.provider.entity.InputStreamProvider com.sun.jersey.core.impl.provider.entity.DataSourceProvider com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General com.sun.jersey.core.impl.provider.entity.ReaderProvider com.sun.jersey.core.impl.provider.entity.DocumentProvider com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General application/octet-stream -> com.sun.jersey.core.impl.provider.entity.ByteArrayProvider com.sun.jersey.core.impl.provider.entity.FileProvider com.sun.jersey.core.impl.provider.entity.InputStreamProvider com.sun.jersey.core.impl.provider.entity.DataSourceProvider com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider |
异常的Stracktrace:
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException:Java 类 io.dropwizard.jersey.validation.ValidationErrorMessage 和 Java 类型类 io.dropwizard.jersey.validation 的消息体编写器。 ValidationErrorMessage,并且未找到 MIME 媒体类型 application/octet-stream。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:284)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1510) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at io.dropwizard.jetty.NonblockingServletHolder.handle(NonblockingServletHolder.java:49) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1515) at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:83) at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:348) at io.dropwizard.jetty.BiDiGzipFilter.doFilter(BiDiGzipFilter.java:127) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486) at io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:29) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:519) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1097) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:448) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1031) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:173) at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:51) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:92) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:162) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at org.eclipse.jetty.server.Server.handle(Server.java:446) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:271) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:246) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532) at java.lang.Thread.run(Thread.java:745) |
- 知道错误会有所帮助,但这看起来很可疑 contentType: ‘json’。应该是 application/json 而不仅仅是 json。您可以使用 dataType:json,但 contentType 设置 Content-Type 标头和 MediaType.APPLICATION_JSON ==”application/json”。我认为jQuery无论如何都会隐式地将内容类型设置为application/json,而不必指定contentType甚至dataType。我可能错了。如果此更改没有帮助,请发布错误/异常/日志
- 啊抱歉忘记改回来了。之前设置为 application/json 。但是当我拥有它甚至删除 dataType 时它仍然不起作用
- 不要使用 void 作为返回类型。尝试使用 Response 并返回 Response.ok(“Message”).build() 看看会发生什么。或者简单地尝试返回类型 String 并返回 “Hello”。无论哪种方式都无所谓。但我认为问题在于 void return
- 我害怕这并没有帮助。相同的错误信息。事情是。它没有进入功能。当我将 Ticket 类作为参数时
- 你有getter和setter吗?
- 是的,我有票务类的 getter 和 setter
- 也尝试在 ajax 请求中设置 accept:application/json 。您应该能够从 ajax 请求中获取错误消息。现在 ErrorMessage 不能被序列化。您发布的错误没有用,因为它没有给出错误的实际原因,而只是错误消息无法序列化。我们需要知道错误的实际原因
- 您也可以使用此处看到的 ExceptionMapper 来尝试打印堆栈跟踪(如果它是当前的);y 不这样做
- 我添加了一个异常跟踪。但我不知道这是否有助于我进一步理解问题
- 这是一个验证问题。您是否已经在 ajax 请求中设置了 accept:’application/json’ ?您需要找出验证问题是什么。您应该能够收到返回的消息。我想它在json中。还可以尝试去掉所有的验证注释,看看它是否有效。如果是这样,请尝试一一添加。 $().val() 也返回一个字符串。你需要 parseInt(..) 它
好的,所以我昨天找到了解决问题的方法。问题是我对 Json data
的实现
1
2 3 4 5 6 7 8 |
var jsonData = {
‘topic’:$(‘#inputTopic’).val(), ‘priority’:parseInt($(‘#inputPriority option:selected’).val()), ‘assigned’:parseInt($(‘#inputAssign option:selected’).val()), ‘text’:$(‘#inputText’).val(), ‘solved’:0, ‘date’:‘No date set’ }; |
这是一个在 javascript 中工作的 Json 数据示例。
来源:https://www.codenong.com/28321625/