我已经在做什么:
@ComponentScan
。ResourceConfig
... @Path
和@Component
... @Autowired
bean从数据库中获取(@Transactional
)POJO ... @Provider
的帮助下,泽西以JSON的形式返回它们。似乎问题是,添加注释@Provider
后,注释为@Component
的类会停止工作。
是否有人成功结合这些注释?如果是,那么我错过了什么?如果没有,那么我很清楚我必须转向其他库。 :)
答案 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;
}
}