当前位置: 首页 > 知识库问答 >
问题:

未能转换“java”类型的值。lang.String“to required type”java。util。日期“on swagger

包唯
2023-03-14

我想用spring boot api访问数据库中的一个函数,并获取它返回的值。当我们在swagger中输入参数时,日期部分会出现错误。

2021 4月1日,我在oracle中调用函数的日期参数时,没有错误,但我无法从spring开始以这种方式发送。

Oracle功能代码:

    CREATE OR REPLACE PACKAGE BODY MET.Z_PKG_OEE_NEW
      FUNCTION Z_OEE_A1AfterReworkRatio(V_plant_config_num_id IN number, p_start_date in date, p_stop_date in date) RETURN NUMBER IS 
        v_result NUMBER;
        p_cur001 SYS_REFCURSOR;
      BEGIN
        Z_OEE_A1AfterReworkRatio_Detail(V_plant_config_num_id,p_start_date,p_stop_date,p_cur001, v_result);


        
        RETURN round(v_result,4);
      END Z_OEE_A1AfterReworkRatio;
end;

ooeController:

    @RestController
@RequestMapping("/api/oeeReports")
@CrossOrigin
public class OeeController {

    private OeeReportService oeeReportService;
    
    @Autowired
    public OeeController(OeeReportService oeeReportService) {
        this.oeeReportService=oeeReportService;
    }
    
    @GetMapping("A1AfterReworkRatio")
    BigDecimal A1AfterReworkRatio(@RequestParam int V_plant_config_num_id, @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date p_start_date ,@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date p_stop_date) {
        return this.oeeReportService.A1AfterReworkRatio( V_plant_config_num_id , p_start_date,  p_stop_date);
    }
    
}

其他服务:

@Service
public class OeeReportManager implements OeeReportService {
    
    private OeeDao oeeDao;  
    
    @Autowired
    public OeeReportManager(OeeDao oeeDao) {
        super();
        this.oeeDao=oeeDao;
    }

    @Override
    public BigDecimal A1AfterReworkRatio(int V_plant_config_num_id, Date p_start_date, Date p_stop_date) {
        // TODO Auto-generated method stub
        return this.oeeDao.A1AfterReworkRatio(V_plant_config_num_id, p_start_date, p_stop_date);
    }

    

}

oeedao:

@Repository
public class OeeDao  {
    
    
    @Autowired
    private EntityManager entitymanager;
    

    

    public BigDecimal A1AfterReworkRatio(int V_plant_config_num_id,Date p_start_date,Date p_stop_date) {
        
            BigDecimal commentCount = (BigDecimal) entitymanager
                    .createNativeQuery(
                        "SELECT Z_OEE_A1AfterReworkRatio(:V_plant_config_num_id:p_start_date:p_stop_date) FROM DUAL"
                    )
                    .setParameter("V_plant_config_num_id", V_plant_config_num_id).setParameter("p_start_date", p_start_date).setParameter("p_stop_date", p_stop_date)
                    .getSingleResult();
              return commentCount;
       
        }
    
    }

昂首阔步:

错误:

 {
  "timestamp": "2021-08-26T07:00:23.487+00:00",
  "status": 500,
  "error": "Internal Server Error",
  "trace": "org.springframework.dao.InvalidDataAccessApiUsageException: Could not locate named parameter [V_plant_config_num_id], expecting one of [V_plant_config_num_id:p_start_date:p_stop_date]; nested exception is java.lang.IllegalArgumentException: Could not locate named parameter [V_plant_config_num_id], expecting one of [V_plant_config_num_id:p_start_date:p_stop_date]\r\n\tat 

如何解决这个问题?

共有1个答案

白灿
2023-03-14

根据https://www.baeldung.com/spring-date-parameters您可以在OeeController中用DateTimeFormat(iso=DateTimeFormat.iso.date)注释日期参数(来自:spring boot application{while creating beans error}):

@GetMapping("A1AfterReworkRatio")
int A1AfterReworkRatio(@RequestParam int V_plant_config_num_id, 
    @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date p_start_date, 
    @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date p_stop_date) {
        return this.oeeReportService.A1AfterReworkRatio( V_plant_config_num_id , p_start_date,  p_stop_date);
}

如果你通读它,上面的文章还描述了实现它的其他方法。

 类似资料:
  • 我有两个微服务是通过外国沟通。一个微服务公开另一个正在调用的方法。该方法将日期作为参数。 这是方法的代码: == 另一个微服务使用这个外来类来调用这个方法: == 我的代码正在启动此异常: 未能转换“java”类型的值。lang.String“to required type”java。util。日期';嵌套异常为org。springframework。果心转换ConversionFailedEx

  • 我正在尝试使用Spring MVC、Java和MySql在我的网络应用程序中实现完整的日历插件。当我尝试在我的jsp中使用“输入类型=日期”添加日期时,我一直收到这个错误: 在我的控制器类中,我使用SimpleDateFormat格式化日期: 最后在我的Jsp中: 这是DAO实现: 在我的实体类中,我将变量保存为日期 我认为问题在于日期的解析,但我不确定!对此问题的任何解释都将不胜感激。

  • 任务控制器 创造jsp 在控制器中,我用相同的错误(以及不同的格式,如“yyyy/MM/dd”)编写了以下内容 我还尝试在类中添加注释(以及使用不同的格式),但出现了相同的错误

  • 我将客户数据对象存储为共享首选项(Android)中的JSON字符串,并尝试检索转换回客户对象的字符串并用于验证。从对象到JSON字符串的转换非常好,并且存储在首选项中(作为键值(字符串)对)。 当我尝试使用-我总是得到相同的错误值...类型java.lang.字符串不能转换为JSONObject。 我希望一双不同的眼睛能捕捉到我不能捕捉到的东西。带有数据的错误消息(屏蔽): Value 类型为j

  • 我正在尝试将java Date转换为java LocalTime,我的代码如下所示 当我打印对话前后的日期时,看起来是这样的: 它看起来像是在向后转换,但我不知道怎么做!

  • 在这里,我试图将数据发送到我的web服务器,并使用解析json并将数据插入mysql数据库。我得到一个错误,表示值stdClass为