【问题标题】:Consuming REST Service in Spring在 Spring 中使用 REST 服务
【发布时间】:2017-05-15 22:45:59
【问题描述】:

我对 Spring 和 Java 非常陌生,但我正在尝试使用一些代码在 Easy Rules 中进行一些规则验证,但我不太明白。

    @RequestMapping(method = {RequestMethod.GET}, value = "author/field", produces= MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ResponseEntity<Enum> getField(@RequestParam(value="field", required=true) String field){
    Enum enum = mongoService.findByField(field);
    if(enum == null){           
        return new ResponseEntity<Enum>(HttpStatus.NO_CONTENT);     
    }else{
        return new ResponseEntity<Enum>(enum,HttpStatus.OK);
    }
}

所以我正在尝试类似的东西:

import com.mongoservice.Enum
import com.mongoservice.Enums

RestTemplate restTemplate = new RestTemplate();
String uri = "http://localhost:9000";

//This is my confusion
List<Enums> response = restTemplate.getForObject(uri +
 "/author/field?={field}", Enum.class,"a").getEnums();
    String value = response.getValue().toString().trim();

//this is the record i'm checking against that is pulling a specific string value and what i'm expecting
    String record = "a";

    return (value == record);

我试图拉回的 JSON 数据是这样建模的,但我需要验证以确保记录等于 enums[] json 数组中的值之一

{
  "field": "a",
  "descriptor": "blah",
  "enums": [
    {
      "value": "h",
      "description": "blah"
    },
    {
      "value": "e",
  "description": "blah"
},
{
  "value": "l",
  "description": "blah"
},
{
  "value": "p",
  "description": "blah"
}
  ]
}

【问题讨论】:

    标签: spring mongodb rest spring-mvc


    【解决方案1】:

    您看到的问题是什么不匹配?如果是这样,可能是因为您使用 == 而不是 String.equals。尝试将您的代码修改为:

    return record.equals(value);
    

    请参阅Java String.equals versus == 了解更多信息。

    【讨论】:

    • 没有了,看看我是否正确使用了 RestTemplate,调试时我得到一个“找不到源”,这可能与服务有关,但我想知道是否我正在正确获取被调用的 json 并正确传输它以在最后的检查中进行比较。
    • 在这种情况下,如果您更改为以下内容,它应该可以工作:String uri = "http://localhost:9000/author/field?field={field}"
    • 嗯,还是一样。
    • 所以您已将 url 的最后一部分更改为 field?field={field} 您的模型类是否有公共 getter 和 setter?您能否将它们包括在此处,您从服务器获得的异常或响应是什么?
    【解决方案2】:

    你能换String uri = "http://localhost:9000"

    并且错过了路径变量名称field,根据您的控制器描述,它应该类似于author/field?field={field}

    【讨论】:

    • 是的,通常我会尝试访问正在运行的服务,但我现在只是在本地运行它以完成代码。
    • 哦,这是我的错,我只是在提问时没有输入。在我的代码中,它有 http 部分。我会编辑,感谢您指出这一点。
    • 能否提供异常的堆栈跟踪?你得到哪条线?
    • 请描述 Enum 类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    相关资源
    最近更新 更多