如何通过restlet从Android连接Web服务(PUT方法)

时间:2013-08-13 18:49:56

标签: android web-services rest restlet

我有一个网络服务:

@Path("/")
@RequestScoped
public class RegistrationService implements Serializable {

    @Inject
    private DeviceService deviceService;

    @PUT
    @Path( "/register/{device}" )
    @Consumes( MediaType.TEXT_PLAIN )
    @Produces( MediaType.TEXT_PLAIN )
    public String device(@PathParam("device") String device) {
        this.deviceService.saveNewDevice(device);
        return "Succesful!";
    }
}

我有一个restlet:

public void sendRegistration() {
    ClientResource resource = new ClientResource(REG_URL);
    resource.addSegment(ctx.getString(R.string.config_segment_register));
    ... (?)
}

所以当前的URL将类似于http:// host:port / application / ws / register / pathParam

如何对网络服务进行PUT调用?有一些方法可以添加queryParams,我可以使用addSegment将ID附加到路径,但不知何故我需要进行PUT。

2 个答案:

答案 0 :(得分:0)

差不多试试

resource.put(representation);

表示是您的纯文本文档。可能是StringRepresentation,但这取决于你。

答案 1 :(得分:0)

由于遗憾的是没有开始工作(可能是因为对API和处理的了解太少/了解)@Caleryn的建议,我对https://stackoverflow.com/a/735090/1343241提出了类似的解决方案

@Path("/")
@RequestScoped
public class RegistrationService implements Serializable {

    @Inject
    private DeviceService deviceService;

    @PUT
    @Path( "/register" )
    @Consumes( MediaType.APPLICATION_FORM_URLENCODED )
    @Produces( MediaType.TEXT_PLAIN )
    public String device(@FormParam("regId") String regId) {
        this.deviceService.saveNewDevice(regId);
        return "Succesful!";
    }
}

在restlet中:

Form queryParams = resource.getReference().getQueryAsForm();
queryParams.set("regId", regId);
resource.put(queryParams);