Java ServerResponse.BodyBuilder中elementClass参数的用途是什么?
有一个简单的模型类,应该用于响应体序列化:Java ServerResponse.BodyBuilder中elementClass参数的用途是什么?,java,spring,jackson,reactive-programming,spring-webflux,Java,Spring,Jackson,Reactive Programming,Spring Webflux,有一个简单的模型类,应该用于响应体序列化: public class MyModel{ public String name; } 在任意Spring 5处理程序函数中使用它: public Mono<ServerResponse> getSometing(ServerRequest request) { MyModel model = new MyModel(); model.name = "abc"; return ServerRespon
public class MyModel{
public String name;
}
在任意Spring 5处理程序函数中使用它:
public Mono<ServerResponse> getSometing(ServerRequest request) {
MyModel model = new MyModel();
model.name = "abc";
return ServerResponse.ok().body(Mono.just(model), %anyClass%);
}
公共Mono getSometing(服务器请求){
MyModel model=新的MyModel();
model.name=“abc”;
返回ServerResponse.ok().body(Mono.just(model),%anyClass%);
}
我试图替换不同的类:对象
,字符串
,我的模型
,运行时异常
,结果总是一样的。每次将模型实例序列化为json{“name”:“abc”}
时
它还适用于具有嵌套对象和数组的更复杂模型
如果第二个参数(
elementClass
)不影响结果,请说明它的用途是什么?为什么我们不能总是使用Object.class
?它不是任何类,它通常是您想要发布/生成的类的类型。在您的情况下,它可以是MyModel.class,即您在响应中发送的
如果您阅读spring文档,它将对您更有意义。
您可以更新代码的最后一行:
ServerResponse.ok().body(Mono.just(model),MyModel.class)它不是任何类,通常是您要发布/生成的类的类型。在您的情况下,它可以是MyModel.class,即您在响应中发送的 如果您阅读spring文档,它将对您更有意义。 您可以更新代码的最后一行:
ServerResponse.ok().body(Mono.just(model),MyModel.class)我希望
body()
方法的所有参数都会影响其结果。如果在我提供MyModel.class
或Object.class
时没有区别,那么甚至需要这个参数的目的是什么?只要看看源代码,它最终会在org\springframework\http\codec\json\AbstractJackson2Encoder.java
中使用,因此,如果你的类有一个自定义序列化程序,你可以传递你想要序列化的类。事实上,有些奇怪的事情发生了,它总是被设置为class.java.lang.object
。@123尝试URI.class
作为%anyClass%
的占位符来查看不同的编码行为。是的,忽略我的第二条评论,这是因为另外一个原因,body()
方法的所有参数都会影响其结果。如果在我提供MyModel.class
或Object.class
时没有区别,那么甚至需要这个参数的目的是什么?只要看看源代码,它最终会在org\springframework\http\codec\json\AbstractJackson2Encoder.java
中使用,因此,如果你的类有一个自定义序列化程序,你可以传递你想要序列化的类。事实上,有些奇怪的事情发生了,它总是被设置为class.java.lang.object
。@123尝试URI.class
作为%anyClass%
的占位符来查看不同的编码行为。是的,忽略我的第二条评论,那是因为别的原因我想你没抓住重点。是的,文档中写的是预期的行为。出乎意料的是,我发现即使我违反了方法的约定,序列化也可以正常工作。你不感到惊讶吗?我想,你没有抓住重点。是的,文档中写的是预期的行为。出乎意料的是,我发现即使我违反了方法的约定,序列化也可以正常工作。你不感到惊讶吗?