11

私は次のようなWebサービスを持っています

@GET
@Produces("application/json")
@Path("{parameter1}/july/{param2},{param3},{param4}/month")
public Month getResult(@PathParam("parameter1") String parameter1, @PathParam("param2") PathSegment param2 , @PathParam("param3") PathSegment param3, @PathParam("param4") PathSegment param4) {
    return action.getResult(parameter1, new Integer(param2.getPath()), new Integer(param3.getPath()), new Integer(param3.getPath()));
}

テスト クラスからこの Web サービスを呼び出すと、問題なく動作します。しかし、ブラウザから呼び出すと、サービスが見つからないというメッセージが表示されます。

ブラウザで使用しているURLは

http://localhost:8080/WebApp/services/seating/mylogin/july/1,0,0/月

URLを次のように使用する場合

http://localhost:8080/WebApp/services/seating/mylogin/fly/1/0/0/月

それに応じてサービスのパスを変更すると正常に動作しますが、要件はスラッシュの代わりにコンマを使用することです。URL にコンマ区切りのパラメーターを指定して Web サービスを使用する方法はありますか?

4

3 に答える 3

1

あなたの例ではPathSegment、これはパスセグメント全体を表すものを使用しています。これは、あなたの場合は「1,0,0」であるため、整数として解析できません。

intの代わりにを使用PathSegmentすると、期待どおりに値が抽出され、メソッド本体がより簡潔になります。

次のコードは私にとってはうまくいきました:

@GET
@Path("{parameter1}/july/{param2},{param3},{param4}/month")
public String commaSeparatedValueDemo(@PathParam("parameter1") String parameter1, @PathParam("param2") int param2, @PathParam("param3") int param3, @PathParam("param4") int param4) {
  return MessageFormat.format("{0}: {1}, {2}, {3}", parameter1, param2, param3, param4);
}

に対する応答

.../some-resource/parameter1/7 月/1,2,3/月

パラメータ 1: 1、2、3

于 2013-12-17T13:14:51.097 に答える
1

私にとっては、複数のパラメーターがクエリ パラメーターではなくパスの一部であっても、複数のパラメーターをコンマで区切っても問題はありません。私はそれをテストし、実際に動作します。

int実際には、これらのパラメーターの正確性を確認する必要がない場合は、直接バインドすることもできます。私は@PathVariableこれらのバインディングに使用しました。

@GET
@Produces("application/json")
@Path("{parameter1}/july/{param2},{param3},{param4}/month")
public Month getResult(@PathVariable("parameter1") String parameter1, @PathVariable("param2") int param2 , @PathVariable("param3") int param3, @PathVariable("param4") int param4) {
    return action.getResult(parameter1, param2, param3,param3);
}

編集:

テストしたコードは次のとおりです。

@Controller
public class InfoController {
    @RequestMapping(method = RequestMethod.GET, value = "/seating/{param1},{param2},{param3}/month")
    public String showMonthView(Model uiModel, @PathVariable("param1") int p1, 
            @PathVariable("param2") int p2, @PathVariable("param3") int p3, 
            HttpServletRequest httpServletRequest) {
        LOG.debug(String.format("view:/seating/%d,%d,%d/month", p1, p2, p3));
        uiModel.addAttribute("param1", p1);
        uiModel.addAttribute("param2", p2);
        uiModel.addAttribute("param3", p3);
        return "month";
    }

    @ResponseBody
    @RequestMapping(method = RequestMethod.GET, value = "/seating/{param1},{param2},{param3}/month", produces="application/json")
    public Map<String, Integer> showMonthJson(@PathVariable("param1") final int p1, 
            @PathVariable("param2") final int p2, @PathVariable("param3") final int p3) {
        LOG.debug(String.format("json:/seating/%d,%d,%d/month", p1, p2, p3));
        Map<String, Integer> result = new HashMap<String, Integer>() {{
            put("param1", p1);
            put("param2", p2);
            put("param3", p3);
        }};
        return result;
    }
}

最初のメソッドの /seating/month.jsp にある正しいビュー。

または、3 つのパラメーターで構成されるエンティティを返し、json または xml を生成しても問題ありません。

于 2012-04-25T11:48:48.967 に答える
0

URL パラメータはコンマで区切られておらず、'&' で区切られています。だからあなたがしなければならないことは、それらを「&」で区切ることです。

于 2012-04-25T10:48:32.467 に答える