Java spring restful web服务验证

Java spring restful web服务验证,java,spring,hibernate,rest,Java,Spring,Hibernate,Rest,我面临一个问题,如何验证json中的空输入 这是我的密码: @RequestMapping(value="/findAdpId/", method=RequestMethod.POST , consumes = "application/json", produces = "application/json") public @ResponseBody String findAdpId(@RequestBody AllCustomerHist customer){

我面临一个问题,如何验证json中的空输入

这是我的密码:

    @RequestMapping(value="/findAdpId/", method=RequestMethod.POST , consumes = "application/json", produces = "application/json")
    public @ResponseBody String findAdpId(@RequestBody AllCustomerHist customer){
        String customerId = customer.getCustomerId();
        String srctable = customer.getSrctable();
        String message;

        System.out.println("customer ID = "+customerId);
        System.out.println("srctable = "+srctable);

//      List<AllCustomerHist> adpcust = allCustomerHistService.findAdpId(customerId, srctable);
        BigDecimal adpcust = (BigDecimal) allCustomerHistService.findAdpId(customerId, srctable);


        JSONObject json = new JSONObject();
        json.put("adpId", adpcust);

        message = json.toString();
        return message;
    }
我的目标是,当抛出此json时:

{
    "srctable":null,
    "customerId":null
    }
它应该返回消息,通知使用者srctable和customerId不能为null,但我不想在dto中添加@NotNull,因为customerId和srctable对于其他进程可能为null


谢谢,等待您的帮助:是时候将DTO引入数据传输对象并在控制器中使用它了。猜测您不需要某些字段,例如实体的LastUpdateDate未在搜索逻辑中使用

您需要添加带有必要字段的自定义POJO,并使用@NotNull和所有其他必要的验证检查对其进行注释。必要时,您可能还需要一个转换器将DTO转换为实体。

使用@Valid from javax.validation.Valid with@NotNull注释


另外,我建议您在一个博客上进行rest API验证。

在这种情况下,您可以始终使用if-else条件!1.粘贴的代码包含太多数据-不需要整个AllCustomerList类来说明问题。2.将DB模型绑定到API模型几乎总是一个非常糟糕的选择。3.实际上,您需要的是域级验证,不应该在控制器内部执行。事实上,我有模型层、dao层和服务层,我不太明白将DB模型绑定到API模型几乎总是一个非常糟糕的选择,你能详细解释一下吗?还有,什么是域级验证?应该在哪里进行?由于请求是从Controlleries处理的,而不是此方法所需的所有字段,我是否应该创建新的dto?我并没有真正理解添加自定义pojo和必要字段的部分,并用@NotNull和所有其他必要的验证检查对其进行注释。必要时,您可能还需要一个转换器将DTO转换为实体。你能详细解释一下吗?谢谢,是的。好处-传递的信息更少,将模型实体和控制器DTO拆分,您需要额外转换的任何验证可能包括从字符串表示到类的转换。例如,对于日期字段,我可以现在或昨天传递值,并添加绑定逻辑以转换为日期类。您对此有什么好的参考资料吗?我在java的spring中是一个新手检查一下这个,我已经有了实体、dao和服务层,在不修改dao和实体层的情况下添加dto层可以吗?我是否只需要使用object mapper for dto修改rest controller?我不想在我的实体对象中使用@Notnull anotation,因为并非所有流程都要求字段为空/不为空谢谢分享:
{
    "srctable":null,
    "customerId":null
    }