Java 如何将对象作为字符串存储在rest webservice的字符串参数中

Java 如何将对象作为字符串存储在rest webservice的字符串参数中,java,json,web-services,rest,Java,Json,Web Services,Rest,我使用的是RESTWebService,我可以在webservice中有一个灵活的字符串参数,它可以接受任何存储为字符串的对象 例如,我有一个示例RequestJson: public class RequestJSON { String username; String password; String data; } 在数据参数中,我想接受任何json对象 @Path("/rest") public class RESTWebservice { @POST

我使用的是RESTWebService,我可以在webservice中有一个灵活的字符串参数,它可以接受任何存储为字符串的对象

例如,我有一个示例RequestJson:

public class RequestJSON {
    String username;
    String password;
    String data;
}
在数据参数中,我想接受任何json对象

@Path("/rest")
public class RESTWebservice {
    @POST
    @Path("/request")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public ResponseJSON sampleWeb(RequestJSON requestJson) {
        logger.info(requestJson.toString());
    }
}
如何使webservice接受在请求json的数据参数中发送的任何json:

例如:

{
"username":"abc",
"password":"xyz",
"data":{"number":"4","input":"","msg":{"msgArr":["hello","test"]}},
}
有可能吗?

有可能:

import java.util.List;

public class Main {

    enum DATATYPE {
        STRING,
        FLOAT,
        INTEGER,
        BOOLEAN; // could add lists but then it gets nasty because you have to have a delimiter
    }

    class ColectionOfData {
        List<DATA> data;
    }

    class DATA  { 
        String name;
        DATATYPE datatype; // form should inform of the data type
        String data;

        public DATA(String name, DATATYPE datatype, String data) {
            this.name = name;
            this.datatype = datatype;
            this.data = data;
        }

        public Object convert() {
            switch(datatype) {
            case BOOLEAN:
                return Boolean.parseBoolean(data);
            case FLOAT:
                return Float.parseFloat(data);
            case INTEGER:
                return Integer.parseInt(data);
            case STRING:
                return data;
            default:
                return null;
            }
        }
    }

}
import java.util.List;
公共班机{
枚举数据类型{
一串
浮动
整数
BOOLEAN;//可以添加列表,但由于必须使用分隔符,因此会变得很糟糕
}
数据集合类{
列出数据;
}
类数据{
字符串名;
DATATYPE DATATYPE;//表单应通知数据类型
字符串数据;
公共数据(字符串名称、数据类型、数据类型、字符串数据){
this.name=名称;
this.datatype=数据类型;
这个数据=数据;
}
公共对象转换(){
交换机(数据类型){
大小写布尔值:
返回Boolean.parseBoolean(数据);
案例浮动:
返回Float.parseFloat(数据);
大小写整数:
返回整数.parseInt(数据);
大小写字符串:
返回数据;
违约:
返回null;
}
}
}
}

但这并不漂亮。你可以让它不那么难看,但是,它总是难看的。

你是否在参数声明之前尝试了<代码> @请求正文< /代码>注释:<代码> @ RequestBody RequestJSON requestJson <代码>。是否有一些与当前实现不一致的问题?如果您想做任何有用的操作,您可能需要考虑使它成为<代码> map < /代码>。数据不过,您需要对结构有一些了解,才能正确地遍历地图。不同的值将为
对象
值生成不同的类型。@克里斯托弗
@RequestBody
属于Spring,我错了吗?OP似乎使用JAX-WS。@sp00m抱歉。我脑子里有太多的框架在游动!