你可以结合泽西和春天(@Provider和@Component)吗?

时间:2015-01-20 20:51:30

标签: java spring jersey jersey-2.0

我已经在做什么:

  1. 春季版 4.1.4.RELEASE
  2. 泽西岛版 2.14
  3. 我添加了maven依赖 jersey-spring3 并排除了它的弹簧(spring-core,spring-web,spring-beans)。
  4. 扫描Spring组件 - @ComponentScan
  5. "控制器"已在泽西岛ResourceConfig ...
  6. 注册
  7. ...并使用@Path@Component ...
  8. 进行注释
  9. ...以便@Autowired bean从数据库中获取(@Transactional)POJO ...
  10. ...并且在某些@Provider的帮助下,泽西以JSON的形式返回它们。
  11. 似乎问题是,添加注释@Provider后,注释为@Component的类会停止工作。

    是否有人成功结合这些注释?如果是,那么我错过了什么?如果没有,那么我很清楚我必须转向其他库。 :)

2 个答案:

答案 0 :(得分:3)

虽然我认为使用RestController可能是更好的方法,但这个代码(下面)有效 - 所以我的回答可能对每个被迫使用Jersey + Spring的人都有用(无论出于何种原因......)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;

import javax.persistence.EntityNotFoundException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class EntityNotFoundExceptionMapper implements ExceptionMapper<EntityNotFoundException> {

    private final ApplicationContext applicationContext;

    @Autowired
    public EntityNotFoundExceptionMapper(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    @Override
    public Response toResponse(EntityNotFoundException exception) {
        return Response.status(Response.Status.NOT_FOUND).build();
    }
}

答案 1 :(得分:0)

你可以使用Spring的RestController,它是在Spring 4.0中添加的。它允许您使用Autowired等。

@RestController
@RequestMapping("/msg")
public class MessageRestController {

     @Autowired
     private IShortMessageService shortMessageService;    

     @RequestMapping(value = "/message-json/{id}", method = RequestMethod.GET, produces = "application/json")
     public ShortMessageDto getMessageJSONById(@PathVariable String id) {
           Long id_value = null;
           try {
                id_value = Long.parseLong(id);
                ShortMessageDto message = shortMessageService.getById(id_value);
                if(message != null){
                return message;
           } catch (NumberFormatException e){
                // log message                    
           }                   
               return null;
      }

}