gpt4 book ai didi

java - (无)参数构造函数的最佳方法 - ResponseBody - Spring

转载 作者:行者123 更新时间:2023-11-30 06:04:37 25 4
gpt4 key购买 nike

让我介绍一下我的代码,然后我会问一个问题。这只是一个例子。如果可能的话,我想学习一些新东西。

BaseClass.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"
}

因此,我发送名称,例如:BaseClass 的名称。我想通过构造函数为 BaseClass 中的变量 BaseName 设置此名称。 @RequestBody 不需要属性构造函数,所以我不能在那里使用第二个带有参数的构造函数。我可以处理这个例如使用附加方法:

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";
}
}

有没有更好的方法以更“专业”的方式做这样的事情?

最佳答案

如果您已经习惯了当前的继承结构,则可以使用 HttpMessageConverter 来自定义 Spring 反序列化 HTTP 请求的方式。

public class MyClassConverter extends AbstractHttpMessageConverter<MyClass> {

public MyClassConverter() {
super(new MediaType("text", "myClass"));
}

@Override
protected boolean supports(Class<?> clazz) {
return MyClass.class.isAssignableFrom(clazz);
}

@Override
protected MyClass readInternal(Class<? extends MyClass> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException {

// Deserialize JSON request

MyClass inputObject = new MyClass(name);
return inputObject;
}

@Override
protected void writeInternal(MyClass myClass, HttpOutputMessage outputMessage) {

// Serialize MyClass object

}
}

Detailed example

关于java - (无)参数构造函数的最佳方法 - ResponseBody - Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51600397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com