创建restful应用程序,但它不会以XML格式返回响应。即使在点击URL时控制台上也没有日志“http://localhost:8080/message/webapi/messages".
我返回一个列表,并使用@products(MediaType.APPLICATION\uxml)以XML形式返回响应。
消息资源。Java语言
package org.porwal.restful.message.resources;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.porwal.restful.message.model.Message;
import org.porwal.restful.message.service.MessageService;
@Path("/messages")
public class MessageResource {
MessageService ms = new MessageService();
@GET
@Produces(MediaType.APPLICATION_XML)
public List<Message> getMessage(){
return ms.getAllMessage();
}
}
Message.java
package org.porwal.restful.message.model;
import java.util.Date;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement( name = "Message" )
public class Message {
public long id;
public String message;
public Date created;
public String author;
public Message() {
}
public Message(long id, String message, String author) {
this.id = id;
this.message = message;
this.author = author;
this.created = new Date();
}
public long getId() {
return id;
}
@XmlElement (name = "ID")
public void setId(long id) {
this.id = id;
}
public String getMessage() {
return message;
}
@XmlElement (name = "Message")
public void setMessage(String message) {
this.message = message;
}
public Date getCreated() {
return created;
}
@XmlElement (name = "Created")
public void setCreated(Date created) {
this.created = created;
}
public String getAuthor() {
return author;
}
@XmlElement (name = "Author")
public void setAuthor(String author) {
this.author = author;
}
}
如果我不使用@XMLRootElement注释,并且TEXT_PLAIN可以通过URL很好地返回,那么这是可行的。我还尝试删除每个字段的@xmlement,但没有成功。当我删除@XMLRootElement时,可以在eclipse控制台上的日志中看到MessageBodyWriter错误,但当包含@XMLRootElement时,则在eclipse控制台和URL上没有日志。”http://localhost:8080/message/webapi/messages“抛出错误:
缺少@XmlRootElement的情况下出错。
org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo SEVERE: MessageBodyWriter not found for media type=application/xml, type=class java.util.ArrayList, genericType=java.util.List<org.porwal.restful.message.model.Message>. This exception comes only when i commented the line "//@XmlRootElement( name = "Message" )".
HTTP状态500-内部服务器错误
有人能告诉我我错过了什么吗?
您需要将消息中的所有字段设置为私有。如果您将它们保留为公共的,那么JAXB将把它视为一个属性,并将其视为重复属性,因为您还有JavaBean属性(getter/setter)。
@XmlRootElement( name = "Message" )
public class Message {
private long id;
private String message;
private Date created;
private String author;
// ...
}
我是如何通过使用通用的ExceptionMapper来解决这个问题的
@Provider
public class DebugExceptionMapper implements ExceptionMapper<Exception> {
@Override
public Response toResponse(Exception exception) {
exception.printStackTrace();
return Response.serverError().entity(exception.getMessage()).build();
}
}
您可以在应用程序中注册它,它将捕获未映射的异常,您可以用它做任何事情。这里我们只打印堆栈跟踪。如果我们不处理它,它就会被吞没,我们永远不会知道发生了什么。
使用ExceptionMapper运行应用程序时,我收到了一条错误消息。
Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 4 counts of IllegalAnnotationExceptions
Class has two properties of the same name "author"
this problem is related to the following location:
at public java.lang.String com.example.Message.getAuthor()
at com.example.Message
this problem is related to the following location:
at public java.lang.String com.example.Message.author
at com.example.Message
Class has two properties of the same name "created"
this problem is related to the following location:
at public java.util.Date com.example.Message.getCreated()
at com.example.Message
this problem is related to the following location:
at public java.util.Date com.example.Message.created
at com.example.Message
Class has two properties of the same name "id"
this problem is related to the following location:
at public long com.example.Message.getId()
at com.example.Message
this problem is related to the following location:
at public long com.example.Message.id
at com.example.Message
Class has two properties of the same name "message"
this problem is related to the following location:
at public java.lang.String com.example.Message.getMessage()
at com.example.Message
this problem is related to the following location:
at public java.lang.String com.example.Message.message
at com.example.Message
你可以清楚地看到问题所在。除了避免这个错误之外,这就是封装的工作原理;字段应该是私有的,并通过getter和setter公开。
我得到错误:com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法通过使用安全套接字层(SSL)加密建立到SQL服务器的安全连接。错误:“SQL服务器没有返回响应。连接已关闭。” Hibernate配置: application.properties: pom.xml: SQLServerException: openssl客户端连接服务器:1
我使用DynamoDB DocumentClient,使用类AWS删除多个表上的项。发电机B。文档客户端 问题是,当我尝试使用删除多个表时,它运行时没有删除该项目,但没有从AWS返回任何异常。我在想是因为我没有返回promise吗? 另一件事是,在DynamoDB页面上,它提到了写入容量: 一个写入容量单位表示大小不超过1 KB的项目每秒写入一次。如果需要写入大于1KB的项,DynamoDB将需要
问题内容: 我的代码中有一个ajax调用。我想通过通话实现的效果很好。我想从数据库中删除一些记录,当通过ajax调用该方法时,该记录实际上被删除了,但是就像在symfony方法中,它必须返回一个响应,这就是为什么当执行该方法时会给我错误 我的Ajax电话是 而执行的方法是 我如何从该方法成功返回?有任何想法吗?谢谢 问题答案: 替换为。也不要忘记在顶部写。
我正在学习Spring Boot。我创建了一个具有Spring Boot安全性的示例Spring Boot Web应用程序,它运行良好。 现在我想在同一个Web应用程序中添加Rest Webservice功能。 问题:当我尝试访问任何API时,我得到的响应是登录。jsp 要求:我希望不需要JSON响应身份验证和授权 要实现这一目标,我需要做哪些更改 Web安全配置:
昨天工作正常,一夜之间Windows7重新启动,现在Eclipse不会完成加载--旋转器显示“Eclipse SDK(未响应)”对话框“用户操作正在等待”完成“构建工作区”。Android SDK内容加载器保持在0%我尝试过: eclipse-clean delete c:\program files\eclipse\configuration.settings\org.eclipse.ui.id
nginx代理服务响应成功,但没有返回内容 配置如下: