3

私はPackagesResourceConfig次のような独自のものを作成しました:

import com.sun.jersey.api.core.PackagesResourceConfig;

import javax.ws.rs.core.MediaType;
import java.util.HashMap;
import java.util.Map;

public class ResourceConfigClass extends PackagesResourceConfig {
    @Override
    public Map<String, MediaType> getMediaTypeMappings() {
        Map<String, MediaType> map = new HashMap<String, MediaType>();
        map.put("xml", MediaType.APPLICATION_XML_TYPE);
        map.put("json", MediaType.APPLICATION_JSON_TYPE);
        return map;
    }
}

しかし、アプリを起動すると、次のようなエラーが表示されます。

パッケージの配列は null または空であってはなりません

これは、Jersey の次のソース コードに由来します。

/**
 * Search for root resource classes declaring the packages as an 
 * array of package names.
 * 
 * @param packages the array package names.
 */
public PackagesResourceConfig(String... packages) {
    if (packages == null || packages.length == 0)
        throw new IllegalArgumentException("Array of packages must not be null or empty");

    init(packages.clone());
}

しかし、param を設定して web.xml にパッケージを設定しているcom.sun.jersey.config.property.packagesので、null にはなりません。

4

1 に答える 1

2

これは実際には Java の問題です。パラメーターを持つ通常のコンストラクターとは異なり、コンストラクターに varargs しかない場合は、何も渡さないことが有効です。その結果、コンストラクターがorまたは非 vararg パラメーターを取った場合のように、コンストラクターをオーバーライドする必要はありません。クラスをこれに変更すると、問題が修正されました。StringInteger

import com.sun.jersey.api.core.PackagesResourceConfig;

import javax.ws.rs.core.MediaType;
import java.util.HashMap;
import java.util.Map;

public class ResourceConfigClass extends PackagesResourceConfig {
    public ResourceConfigClass(String... packages) {    //this constructor needs to be here, do not delete it or else the com.sun.jersey.config.property.packages param can't be passed in.
        super(packages);
    }

    public ResourceConfigClass(Map<String, Object> props) { //this constructor needs to be here, do not delete it or else the com.sun.jersey.config.property.packages param can't be passed in.
        super(props);
    }

    @Override
    public Map<String, MediaType> getMediaTypeMappings() {
        Map<String, MediaType> map = new HashMap<String, MediaType>();
        map.put("xml", MediaType.APPLICATION_XML_TYPE);
        map.put("json", MediaType.APPLICATION_JSON_TYPE);
        return map;
    }
}
于 2013-09-18T22:00:36.417 に答える