java是(无)参数构造函数ResponseBy Spring的最佳方式
让我介绍一下我的代码,然后我会问一个问题。 这只是一个例子。如果可能的话,我想学点新东西
基类。java
public class BaseClass {
private String baseName;
BaseClass(String baseName){
this.baseName = baseName;
}
//getters and setters
}
MyClass。java
public class MyClass extends BaseClass {
private boolean isTest;
private String name;
MyClass(){
}
MyClass(String baseName){
super(baseName);
this.isTest = true;
}
//getters and setters
}
MyClassController。java
@Controller
public class MyClassController {
@GetMapping(value="/")
@ResponseBody
public String myClassController(@RequestBody MyClass myClass) {
return "index";
}
}
JSON请求:
{
"name": "Name for BaseClass"
}
因此,我发送name例如:基类的name。我想通过构造函数为基类中的变量BaseName设置此名称@RequestBody不需要atribute构造函数,因此我不能在那里使用带参数的第二个构造函数。我可以处理这个问题,例如使用其他方法:
MyClass中的附加方法。java
public MyClass setValues(String baseName){
super(baseName);
this.isTest = true;
return this;
}
新的MyController。java
@Controller
public class MyClassController {
@GetMapping(value="/")
@ResponseBody
public String myClassController(@RequestBody MyClass myClass) {
myClass.setValues(myClass.getName());
//more uses for myClass
return "index";
}
}
有没有更好的方法以更“专业”的方式做类似的事情
# 1 楼答案
如果您使用的是当前的继承结构,那么可以使用HttpMessageConverter定制Spring反序列化HTTP请求的方式
Detailed example
# 2 楼答案
虽然不清楚,但我假设name和baseName是相同的值。在这种情况下,基类是抽象类或接口可能是有意义的
抽象类:
接口:
另外,我不能从给定的示例中告诉您很多关于用例的信息,但是您应该阅读Composition over inheritance,以确保您以正确的方式进行操作。特别是对于DTO,通常简单是最好的