当前位置: 首页 > 面试题库 >

如何使控制器端点在Java Spring中获得两个不同的对象?

商风华
2023-03-14
问题内容

我有一个用Java和Spring构建的服务器。

我想做的是,具有相同端点的控制器将获得两个不同的对象。

这是我的意思的一个例子:

我知道我可以做到:

  public class Option1{
   private String name;
   ...
     //getter and setter
    }

public class Option2{
 private Long id;
  ...
//getter and setter
}

@Controller
public class Controller{

 @RequestMapping(value = "service/getData/option1", method = RequestMethod.POST)
 @ResponseBody
 public String searchProv(@ResponseBody Option1 data1){
  return "option1"
   }

@RequestMapping(value = "service/getData/option2", method = RequestMethod.POST)
@ResponseBody
public String searchProv(@ResponseBody Option2 data2){
  return "option2"
  }
}

但我想知道是否有可能将不同的json对象传递到同一端点并执行以下操作:

 @Controller
public class Controller{

 @RequestMapping(value = "service/getData", method = RequestMethod.POST)
 @ResponseBody
 public ResponseEntity<Any> getData(@ResponseBody Option1And2 data){
if(data instanceof Option1){
  return return ResponseEntity<Any>(data.name,HttpStatus.OK)
}        
if(data instanceof Option2){
   return ResponseEntity<Any>(data.id,HttpStatus.OK)
}
 return ResponseEntity<Any>("ok",HttpStatus.OK)
  }

这样’Option1And2’是通用对象可以是option1或option2。

我试图将“ Option1And2”替换为“ Any”,但操作不顺利,因为我得到了键和值的列表


问题答案:

您应该使用 JsonNode 对象。

对于您的示例,您应该这样做:

 @Controller
 public class Controller{

 @RequestMapping(value = "service/getData", method = RequestMethod.POST)
 @ResponseBody
 public ResponseEntity<Any> getData(@RequestBody JsonNode jsonNode){

   ObjectMapper obj = new ObjectMapper();

  if(jsonNode.has("name"){
   Option1 result= obj.convertValue(jsonNode,Option1.class)
  return ResponseEntity<Any>(result.name,HttpStatus.OK)
    }

   else {

   Option2 result= obj.convertValue(jsonNode,Option2.class)
   return ResponseEntity<Any>(result.id,HttpStatus.OK)
    }

    return ResponseEntity<Any>("ok",HttpStatus.OK)
     }

您应该从此处导入的JsonNode和ObjectMapper:

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.JsonNode;

该链接应帮助您更好地了解JsonNode并提供更多详细信息。

并且此链接应该可以帮助您将JsonNode的convertValue转换为java
object(POJO)。



 类似资料:
  • 我的控制器中有一个函数。问题是我必须同时使用两个请求,但在控制器中只能使用其中一个。 照明\支持\外观\请求 代码: 解决方案是什么?

  • 我正在尝试使用Rest-Asure和Java为GET API创建测试自动化。 此API具有以下响应主体: 在此API响应中有两个同名“id”的字段。如何获取这两个字段的值? 谢谢

  • 问题内容: 我在一个视图控制器中有两个S。我可以让一个工作,但是当我添加另一个工作时,我的应用程序崩溃了。这是我用于一个选择器视图的代码: 现在,如何让第二个选择器工作?假设我的第二个选择器视图称为(另一个称为)。我尝试在选择器视图方法中复制代码,但它不起作用。 问题答案: 根据我在问题中得到的信息,我想您需要设置数据源和委托方法来处理区分哪个选择器实例正在调用它们的能力。 在选择器视图上使用ta

  • 问题内容: 因此,我发现了这个名叫法拉利(Ferrari)的家伙创造的这款出色的乒乓球游戏,我的任务是使他成为两名拥有2分但没有高分的玩家。我做了很多尝试,除了当我制作第二组控制运动的代码时,它要么被完全忽略,要么按分配给它的向上按钮,它将一直向上移动,而不会向下移动。 问题答案: 您的代码已被改编为以下两人游戏。该程序已重组为各种功能,类和方法。没有AI时,控件是相同的。 Edit: In de

  • Evere:路径为[/EmployeeRegistrationForm]的上下文中servlet[dispatcher]的servlet.Service()引发异常[请求处理失败;嵌套异常为org.springframework.web.bind.annotation.support.handlerMethodInvocationException:未能调用处理程序方法[public java.u