小编Nof*_*ate的帖子

用Jackson序列化枚举

我在下面有一个Enum desrcibed:

public enum OrderType {

  UNKNOWN(0, "Undefined"),
  TYPEA(1, "Type A"),
  TYPEB(2, "Type B"),
  TYPEC(3, "Type C");

  private Integer id;
  private String name;

  private WorkOrderType(Integer id, String name) {
    this.id = id;
    this.name = name;
  }

  //Setters, getters....
}
Run Code Online (Sandbox Code Playgroud)

我使用我的controller(new OrderType[] {UNKNOWN,TYPEA,TYPEB,TYPEC};)返回枚举数组,然后Spring将其序列化为以下json字符串:

["UNKNOWN", "TYPEA", "TYPEB", "TYPEC"] 
Run Code Online (Sandbox Code Playgroud)

迫使杰克逊像POJO一样序列化枚举的最佳方法是什么?例如:

[
  {"id": 1, "name": "Undefined"},
  {"id": 2, "name": "Type A"},
  {"id": 3, "name": "Type B"},
  {"id": 4, "name": "Type C"}
]
Run Code Online (Sandbox Code Playgroud)

我玩了不同的注释但无法获得这样的结果.

java spring json spring-mvc jackson

88
推荐指数
5
解决办法
10万
查看次数

Spring MVC控制器继承和路由

在我的Spring MVC webapp中,我有一个用于CRUD操作的通用RESTful控制器.而且每个具体的控制器只有一个声明@RequestMapping,例如/foo.通用控制器处理所有请求/foo/foo/{id}.

但现在我需要编写一个更复杂的CRUD控制器,它将获得额外的请求参数或路径变量,例如/foo/{date}/foo/{id}/{date}.所以我扩展了我的通用CRUD控制器并编写了重载fetch(id, date)方法,它将处理两者{id}{date}.那不是问题.

但是我还需要'禁用' fetch(id)从基类派生的 实现(资源不能/foo/{id}再用,只能在那里/foo/{id}/{date}).我想出的唯一想法是在我的具体控制器中覆盖此方法,将其映射到假uri上并返回null.但这看起来像是丑陋的脏黑客,因为我们暴露了一些假的资源uri,而不是禁用它.可能有更好的做法?

有任何想法吗?

//My generic CRUD controller
public abstract class AbstractCRUDControllerBean<E, PK extends Serializable> implements AbstractCRUDController<E, PK> {

  @RequestMapping(method=RequestMethod.GET)
  public @ResponseBody ResponseEntity<E[]> fetchAll() { ... }

  @RequestMapping(value="/{id}", method=RequestMethod.GET)
  public @ResponseBody ResponseEntity<E> fetch(@PathVariable("id") PK id) { ... }

  @RequestMapping(method=RequestMethod.POST)
  public @ResponseBody ResponseEntity<E> add(@RequestBody E entity) { ... }

  @RequestMapping(value="/{id}", method=RequestMethod.PUT) …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-annotations

15
推荐指数
1
解决办法
1万
查看次数

如何正确处理可能未传递给客户端代码的InterruptedException?

我偶然发现了一个我必须处理的情况InterruptedException,但不能将它向上传递,并且不要觉得我的代码应该被允许吞下它.确切地说,我正在进行分布式锁实现,并且支持服务的请求可能会中断甚至超时 - 当然,这java.util.concurrent.Lock并不能解释这种情况,也不允许我吐出InterruptedException.我挣扎写非投掷正确实施lock(),tryLock()unlock()方法.

所以,问题是 - 处理这种情况的正确策略是什么?从目前的角度来看,我只看到三个选项(我感觉每个人都有气味):

  1. 忽略lock/ tryLock/ unlock方法中的中断异常,重试/返回false /假设即使请求没有到达目的地,TTL最终也会解锁记录.这显然不是最好的解决方案,因为它希望一切都好,而不是处理问题.
  2. 包裹RuntimeException继承人.这似乎也是一个非常糟糕的解决方案,因为客户端代码必须使用具体的实现而不是原始接口,并且未经检查的异常当然不是为了这样的目的.
  3. 使用 Thread.currentThread().interrupt()呼叫.我不喜欢这种方式,因为它基本上告诉线程处理它自己的中断,而不是传递关于呼叫被中断的通知; 另外,据我所知,如果没有外部轮询,它最终会产生线程,但不会立即处理中断,可能是在另一个地方.

(而且,当然有一个选项允许客户端代码配置所需的行为,但这仍然没有为我提供一个非常好的解决方案)

有没有比我所描述的更好的方式?如果不是,哪一个应优先于其他?

java interrupted-exception

5
推荐指数
1
解决办法
740
查看次数

事务问题:没有Hibernate Session绑定到线程

我重构了我的服务层作为通用组件.之后,对我的控制器的所有请求都开始抛出org.hibernate.HibernateException:没有Hibernate Session绑定到线程,并且配置不允许在这里创建非事务性的.

我通过互联网搜索并找到了常见的原因:

  1. 缺少@Transaction注释.
  2. 使用hibernate.current_session_context_class和hibernate.transaction_factory_class选项.
  3. 直接调用sessionFactory.openSession().
  4. 使用BeanFactory而不是ApplicationContext.
  5. DAO类的几个实例.

但似乎没有一个与我的案子有关.

我很感激任何帮助,因为我花了这么多时间来处理这个例外.

堆栈跟踪

[INFO] 2011-08-12 15:42:49,383 [btpool0-0] INFO  ru.centr_in.rescuer.server.web.InfoJournalController - FETCH started: all
[INFO] 2011-08-12 15:42:49,383 [btpool0-0] DEBUG org.springframework.orm.hibernate3.SessionFactoryUtils - Opening Hibernate Session
[INFO] 2011-08-12 15:42:49,383 [btpool0-0] DEBUG org.hibernate.impl.SessionImpl - opened session at timestamp: 13131493693
[INFO] 2011-08-12 15:42:49,383 [btpool0-0] DEBUG org.springframework.orm.hibernate3.SessionFactoryUtils - Closing Hibernate Session
[INFO] 2011-08-12 15:42:49,383 [btpool0-0] DEBUG org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver - Resolving exception from handler [ru.centr_in.rescuer.server.web.InfoJournalController@14e1b74]: org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate transactions

2
推荐指数
1
解决办法
1万
查看次数