- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只想将我的用户对象作为 JSON 返回,以供客户端的 ajax 调用使用。
这在某一点上是有效的,经过一些更新(即,将应用程序更改为部署到/在 Jetty 中),现在就不行了。
我没有从代码中抛出异常,它返回得很好,但在尝试将对象转换为 JSON 时,似乎在 Jackson 的根代码中的某个地方发生了爆炸。
就像我说的,我没有遇到异常,我的 ajax 调用只是爆炸并显示错误代码“500,内部服务器错误”。
/* User contains information about a user of this site, that exists only
* in the context of this site (no names, addresses).
*/
@Entity(name="User")
@Table(name="USER")
@NamedQuery(
name="findUserByName",
query="SELECT OBJECT(u) FROM User u WHERE u.name = :name"
)
public class User extends AuditableEntity implements Serializable {
private static final long serialVersionUID = -1308795024222223320L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private Long id;
@NotEmpty
@MinSkipEmpty(value=6)
@MaxSkipEmpty(value=32)
@Column(name="name", length=32)
private String name;
@NotEmpty
@MinSkipEmpty(value=4)
@MaxSkipEmpty(value=40)
@Column(name="password", length=40)
private String password;
@Column(name="salt", length=40)
private String salt;
@ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST})
@JoinColumn(name="person_id")
private Person person;
@Column(name="last_login")
private Date lastLogin;
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name ="USER_AUTHORITY")
@Column(name="authority")
private List<Integer> authorities;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = (name == null ? name : name.trim());
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = (password == null ? password : password.trim());
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public Date getLastLogin() {
return lastLogin;
}
public void setLastLogin(Date lastLogin) {
this.lastLogin = lastLogin;
}
public List<Integer> getAuthorities() {
return authorities;
}
public void setAuthorities(List<Integer> authorities) {
this.authorities = authorities;
}
}
这是人实体
@Entity(name = "Person")
@Table(name = "PERSON")
public class Person extends AuditableEntity implements Serializable {
private static final long serialVersionUID = -1308795024262635690L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@NotEmpty
@MaxSkipEmpty(value=64)
@Column(name = "firstName", length=64)
private String firstName;
@NotEmpty
@MaxSkipEmpty(value=64)
@Column(name = "lastName", length=64)
private String lastName;
@NotEmpty
@Email
@MaxSkipEmpty(value=256, message="")
@Column(name = "email", length=256)
private String email;
@DateTimeFormat(pattern="MM/dd/yyyy")
@NotNull(message = "Required field")
@Column(name = "date")
private Date birthday;
@ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST })
@JoinColumn(name = "location_id")
private Location location;
public Person() {
}
public Person(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Location getLocation() {
return location;
}
public void setLocation(Location location) {
this.location = location;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return super.toString() + " name = " + firstName + " " + lastName
+ " id = " + id;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result
+ ((lastName == null) ? 0 : lastName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (lastName == null) {
if (other.lastName != null)
return false;
} else if (!lastName.equals(other.lastName))
return false;
return true;
}
}
<小时/>
@Entity(name = "Location")
@Table(name = "LOCATION")
public class Location extends AuditableEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
//name of person/place/thing
@Column(name = "name", length=128)
String name;
//street address, p.o. box, company name, c/o
@NotEmpty
@MaxSkipEmpty(value=128)
@Column(name = "line_1", length=128)
String line1;
// apt., suite, building, floor, entrance, etc.
@Column(name = "line_2", length=128)
String line2;
@NotEmpty
@MaxSkipEmpty(value=64)
@Column(name = "city", length=64)
String city;
// state, providence, region
@NotEmpty
@MaxSkipEmpty(value=40)
@Column(name = "state", length=40)
String state;
// postal code
@NotEmpty
@MaxSkipEmpty(value=16)
@Column(name = "zip", length=16)
String zip;
@Column(name = "country")
String country;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLine1() {
return line1;
}
public void setLine1(String line1) {
this.line1 = line1;
}
public String getLine2() {
return line2;
}
public void setLine2(String line2) {
this.line2 = line2;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
private static final long serialVersionUID = -178898928354655555L;
}
<小时/>
@RequestMapping(value="user/{documentId}", method=RequestMethod.GET)
public @ResponseBody User getUserForDocument( Model model, @PathVariable("documentId") Long docId){
Document doc = null;
try{
doc = dService.find(docId);
}catch(Exception e){
Logger logger = Logger.getLogger(DocumentController.class);
logger.error(e.getMessage());
}
User user = doc.getUser();
user.getPerson();
user.getPerson().getLocation();
return user;
}
<小时/>
@Repository()
public class DocumentDaoImpl implements DocumentDao {
@PersistenceContext
private EntityManager entityManager;
@Transactional
public Document find(Long id) {
Document doc = entityManager.find(Document.class, id);
Hibernate.initialize(doc.getUser());
Hibernate.initialize(doc.getUser().getPerson());
Hibernate.initialize(doc.getUser().getPerson().getLocation());
return doc;
}
@SuppressWarnings("unchecked")
@Transactional
public List<Document> getUnassignedDocumentsForUser(User user) {
Query query = entityManager.createQuery(new StringBuffer()
.append("select d from Document d WHERE d.user = :user ")
.append("AND NOT d IN( SELECT d from Book b, IN(b.docs) bd WHERE bd.id = d.id )")
.append("").toString());
query.setParameter("user", user);
List<Document> tmp = (ArrayList<Document>) query.getResultList();
for(Document doc : tmp){
Hibernate.initialize(doc);
Hibernate.initialize(doc.getUser());
Hibernate.initialize(doc.getUser().getPerson());
Hibernate.initialize(doc.getUser().getPerson().getLocation());
entityManager.detach(doc);
entityManager.detach(doc.getUser());
entityManager.detach(doc.getUser().getPerson());
entityManager.detach(doc.getUser().getPerson().getLocation());
}
return tmp;
}
@Transactional
public Document save(Document doc) {
if (doc.getId() == null) {
entityManager.persist(doc);
return doc;
} else {
return entityManager.merge(doc);
}
}
public EntityManager getEntityManager() {
return entityManager;
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
}
错误异常解析器:
@Component
public class BWHandlerExceptionResolver extends SimpleMappingExceptionResolver implements InitializingBean{
public void afterPropertiesSet() throws Exception {
Properties props = new Properties();
props.put(Exception.class.getName(),"error");
this.setExceptionMappings(props);
}
最佳答案
我经历了几乎相同的问题,但想知道到底是什么导致 jackson 失败,而不是仅获取 500 个内部服务器,并且日志中的任何位置都没有异常堆栈跟踪。检查了Spring MVC的源码后,第一个捕获异常的地方是ServiceInvocableHandlerMethod.java(第109-116行):
...
try {
returnValueHandlers.handleReturnValue(returnValue, getReturnType(), mavContainer, request);
} catch (Exception ex) {
if (logger.isTraceEnabled()) {
logger.trace(getReturnValueHandlingErrorMessage("Error handling return value", returnValue), ex);
}
throw ex;
}
...
handleReturnValue(...) 抛出异常,并在此处捕获但未打印出来,因为 logger.isTraceEnabled() 在默认配置中返回 false。为了在日志中查看异常堆栈跟踪,我需要在上述类上启用 TRACE 级别日志记录。在我的特定情况下(我使用 log4j),这里是 log4j.properties 的相关部分:
...
log4j.logger.org.springframework.web.servlet.mvc.method.annotation=TRACE
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=TRACE
...
关于spring - Jackson @ResponseBody 上的内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9594834/
这是我的测试用例。 http://tobeythorn.com/isi/dummy2.svg http://tobeythorn.com/isi/isitest.html 如果我自己打开 svg,内部
这是我的测试用例。 http://tobeythorn.com/isi/dummy2.svg http://tobeythorn.com/isi/isitest.html 如果我自己打开 svg,内部
我正在尝试做类似的事情: SELECT SUM( CASE WHEN ( AND EXISTS(SELECT 1
我想问如何在外部 ng-repeat 内部正确使用内部 ng-repeat: 这意味着你想使用这样的东西: {{milestone.id}} {{
我希望在 wordpress 的仪表板内编辑 css 样式并且如果可能的话不必编辑 php 文件。 我知道至少可以编辑一些属性,所以我希望我可以直接在仪表板中编辑所有属性。 更具体地说如何更改自定义类
我在安装在 windows10 上的 vmware 中的 Ubuntu 上安装了伪分布式独立 hadoop 版本。 我从网上下载了一个文件,复制到ubuntu本地目录/lab/data 我在 ubun
我有一个如下所示的 WHERE 语句: WHERE ((@Value1 IS NULL AND [value1_id] IS NULL) OR [value1_id] = ISNULL(@Va
我有一个如下所示的 WHERE 语句: WHERE ((@Value1 IS NULL AND [value1_id] IS NULL) OR [value1_id] = ISNULL(@Va
在我的一些测试帮助程序代码中,我有一个名为 FakeDbSet(Of T) 的 IDbSet(Of T) 实现,它模拟了许多 EF 行为,但没有实际的数据库。我将类声明为 Friend ,因为我想强制
我正在寻找 Cassandra/CQL 的常见 SQL 习语 INSERT INTO ... SELECT ... FROM ... 的表亲。并且一直无法找到任何以编程方式或在 CQL 中执行此类操作
如何防止内部 while 循环无限运行?问题是,如果没有外部 while 循环,内部循环将毫无问题地运行。我知道它必须对外循环执行某些操作,但我无法弄清楚是什么导致了问题。 import java.u
我正在努力学习更多有关 C++ 的知识,但在国际象棋程序中遇到了一些代码,需要帮助才能理解。我有一个 union ,例如: union b_union { Bitboard b; st
这是我项目网页中的代码片段。这里我想显示用户选择的类别,然后想显示属于该类别的主题。在那里,用户可以拥有多个类别,这没有问题。我可以在第一个 while 循环中打印所有这些类别。问题是当我尝试打印主题
我想知道如何在 swing 中显示内部框架。这意味着,当需要 JFrame 时,通常我所做的是, new MyJFrame().setVisible(true); 假设之前的表单也应该显示。当显示这个
我最近发现了一些有趣的行为,这让我想知道对象如何知道存在哪些全局变量。例如,假设我有一个文件“test.py”: globalVar = 1 toDelete = 2 class Test(objec
我知道它已经在这里得到回答: google maps drag and drop objects into google maps from outside the Map ,但这并不完全是我所需要的
我目前正在学习Javascript DOM和innerHTML,发现在理解innerHTML方面存在一些问题。 这是我的代码:http://jsfiddle.net/hphchan/bfjx1w70/
我构建了一个布局如下的库: lib/ private_class_impl.cc private_class_decl.h public_class_impl.cc include/
我有一个使用 bootstrap 3 的组合 wordpress 网站。它基本上是一个图像网格。当屏幕展开时,它会从三列变为四列。移动时它是一列。 我想出了如何调整图像的顶部和底部边距,但我希望图像的
我正在试用 MSP-EXP430G2 的教程程序,使用 Code Composer Studio 使 LED 闪烁。最初,它有一个闪烁的无限循环: for(;;) // This emp
我是一名优秀的程序员,十分优秀!