1

私はこの性質の他のいくつかの質問を見ましたが、それらは法案に完全には適合しませんでした。

現在、2つの異なるコントローラーからJSONを返そうとしています。私のコントローラーの1つでは問題なく動作しますが、2番目のエンドポイントに到達すると、406エラーが発生し、何が問題なのか理解できません。コントローラのアクションは次のとおりです。

@RequestMapping("/v1/companies/name/{companyName}")
public @ResponseBody ResultsList<CompanyResult> getCompaniesByName(@PathVariable("companyName") String companyName) {

    if (StringUtils.isEmpty(companyName)) {
        throw new HttpMessageNotReadableException("blah");
    }

    ResultsList<CompanyResult> results = companySearchService.getCompaniesByName(companyName);

    return results;
}

これが私が返そうとしているモデルです:

public class ResultsList<T> {
    @XmlElement(name = "results")
    private ArrayList<T> results;

    public int resultCount() {
        return this.results.size();
    }

    public void addResult(T result) {
        this.results.add(result);
    }

    public ResultsList() {
        this.results = new ArrayList<T>();
    }
}

コントローラコードからわかるように、私のResultsListはCompanyResultオブジェクトで構成されています。

public class CompanyResult implements ICompany {
    @XmlElement(name = "companyName")
    private String companyName;

    @XmlElement(name = "symbol")
    private String symbol;

    @XmlElement(name = "city")
    private String city;

    @XmlElement(name = "state")
    private String state;
......

したがって、私のコントローラーは@XmlElementで注釈が付けられた@RequestBody ResultsListを返し、リストに含まれるオブジェクトにも@XmlElementで注釈が付けられます。これは、他のシナリオを機能させるために私がしなければならなかったことです。しかし、これは失敗します。誰か教えてもらえますか?

4

3 に答える 3

2

HTTP応答コードのリストによると、 406(受け入れられない)は

要求されたリソースは、要求で送信されたAcceptヘッダーに従って受け入れられないコンテンツを生成することしかできません。

したがって、XMLを受け入れられるようにAcceptヘッダーを設定していない可能性があります。通常、JavaScriptはデフォルトでJSONを想定しています。したがって、Acceptヘッダーを設定するには、次のようなものを使用します。

function getCompany() {
 var client = new XMLHttpRequest();
 client.open("GET", "/v1/companies/name/exampleCompany");
 client.setRequestHeader("Accept", "application/xml");
 client.send();
}

または、代わりにapplication/jsonを生成するようにWebサービスを設定することもできます。

于 2010-11-17T20:50:44.753 に答える
1
public class ResultsList<T> {
    private List<T> mResults;

    @JsonGetter("results")
    public final List<T> getResults() {
        return mResults;
    }

}
于 2010-12-07T18:30:34.343 に答える
1

<mvc:annotation-driven>SpringMVCコンテキストにあることを確認してください。このエラーは、Spring MVCが@ResponseBodyを認識せず(HttpMessageConverterを登録していない)、結果オブジェクトを古い形式のModelAndViewに変換しようとした場合に発生します。

于 2011-10-21T10:19:34.270 に答える