0

我有一个抽象类,它声明了一个@PUT方法:

public abstract class BaseResource<T> {

  @PUT
  @Consumes(MediaType.APPLICATION_JSON)
  @Produces(MediaType.APPLICATION_JSON)
  public abstract Response create(T entityClass);

}

然后一个类实现该方法:

public class GroupsResource extends BaseResource<Group> {

  @Override
  public Response create(Group newGroup) {

    // this works.
    // ...
    return response.build();

  }
}

使用 GET 方法的类似代码可以工作,但是这个代码被405 Method Not Allowed拒绝。但是,如果我用它来注释实现@PUT确实有效。因此,抽象声明上的 @PUT 注释似乎没有被继承。

有什么想法吗?

更新:

我从头开始使用 Java EE7,效果很好。

4

1 回答 1

0

我在我的项目中遇到了同样的问题,我这样解决了:

//Inject the object mapper because you don't want to retreive an "Object"
@Inject
ObjectMapper objectMapper;

@PUT
//The PUT endpoint retrieves a plain object
public Response update(Object object){
   //Now we determine the concrete type of the object by using reflection
   ParameterizedType p = (ParameterizedType) getClass().getGenericSuperclass();
   Class<DTO> clazz = (Class<DTO>) p.getActualTypeArguments()[0];

   //Pass the object and the determined type to the objectmapper
   DTO dto = objectMapper.convertValue(object, clazz);

   //Now call an abstract method that deals with the object in you concrete class
   updateDto(dto);
}

protected abstract Response updateDto(DTO dto);
于 2018-12-14T11:07:43.903 回答