2016-08-11 7 views
1

編集:これを修正する方法を理解し、以下の回答に掲載しました。タイプの戻り値のコンバータが見つかりません - dbコールのSpring Rest API

私は、dbを照会して2つの値を返すAPIを作成しようとしています。私はそれがコンソールに値を吐き出すことを見ることができるので、dbクエリが動作することを知っています。私はそれを実行する場合でも、私はこのエラーを取得していない:タイプの戻り値が見つかりませコンバータ:ここでは、クラスhello.GetPatientInfo

は私のコントローラのコードである:ここで

package hello; 

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.ResponseBody; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
public class PatientInfoController { 

    @RequestMapping("/patientinfo") 
    @ResponseBody 
    public GetPatientInfo getPatientInfo (@RequestParam String ssnum){ 
     return new GetPatientInfo(ssnum); 
    } 
} 

はそれのための私のクラスである。

package hello; 

import com.automation.dataprovider.DatabaseFunctions; 

public class GetPatientInfo { 
    DatabaseFunctions db = new DatabaseFunctions(); 
    private final String pname; 
    private final String patno; 

    public GetPatientInfo(String ssnum){ 
     this.patno = getPatNo(ssnum); 
     this.pname = getPname(ssnum); 

    } 

    public String getPatNo(String ssnum){ 
     String query = "SELECT PATNO FROM lib.PATIENTS WHERE SSNUM = '" + ssnum +"'"; 
     String patno = db.returnSingleValue(query).toString(); 
     System.out.println(patno); 
     return patno; 
    } 

    public String getPname(String ssnum){ 
     String query = "SELECT PNAME FROM lib.PATIENTS WHERE SSNUM = '" + ssnum +"'"; 
     String pname = db.returnSingleValue(query).toString(); 
     System.out.println(pname); 
     return pname; 
    } 
} 

私は以前にAPIを作成したことがないので、私は根本的に何かをやっていると確信しています。どんな助けでも大歓迎です。

+0

完全なスタックトレースを提供してください。これはおそらく、オブジェクトをjson形式に変換できないマッピングに関連しています。 –

+0

@PedroMadridは既に述べました。 Springがyout Java ObjectをJSONにマップできないようです。機能を持たない単一のラッパーオブジェクトだけを返すようにしてください。 – grahan

+0

[@ResponseBodyを使用してSpring ControllerからJSONデータを返す方法](http://stackoverflow.com/questions/32905917/how-to-return-json-data-from-spring-controller-using-responsebody)の可能な複製 –

答えて

0

私が間違っていたことを理解したので、2つの変数を渡して、返されるようにしなければなりませんでした。

private final String pname = ""; 
    private final String patno = ""; 

    @RequestMapping("/patientinfo") 
    @ResponseBody 
    public GetPatientInfo getPatientInfo (@RequestParam String ssnum){ 
     return new GetPatientInfo(pname, patno, ssnum); 
    } 

受信エラーが修正されました。

1

クラスGetPatientInfoをデータベースから独立させることができます。データベースの情報については、常にラッパークラスのみを返す必要があります。したがって、ラッパークラスはデータベース呼び出しをまったく行うべきではありません。

このようにすることができます。 package hello;

GetPatienInfo

package hello; 

import com.automation.dataprovider.DatabaseFunctions; 

public class GetPatientInfo { 
DatabaseFunctions db = new DatabaseFunctions(); 
private final String pname; 
private final String patno; 

public GetPatientInfo(String pname, String patno){ 
    this.patno = patno; 
    this.pname = pname; 

} 

public String getPatNo(){ 
    return this.patno; 
} 

public String getPname(){ 
    return this.pname; 
} 
} 

そして、彼のコメントで述べた@Bobドリンクなどに

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.ResponseBody; 
import org.springframework.web.bind.annotation.RestController; 
import com.automation.dataprovider.DatabaseFunctions; 

@RestController 
public class PatientInfoController { 



@RequestMapping("/patientinfo") 
@ResponseBody 
public GetPatientInfo getPatientInfo (@RequestParam String ssnum){ 
    DatabaseFunctions db = new DatabaseFunctions(); 
    String pname = db.returnSingleValue("SELECT PNAME FROM lib.PATIENTS WHERE SSNUM = '" + ssnum +"'";).toString(); 
    String patno = b.returnSingleValue(SELECT PATNO FROM lib.PATIENTS WHERE SSNUM = '" + ssnum +"'").toString(); 
    return new GetPatientInfo(pname, patno); 
} 

そして:あなたはJSONを返す必要が依存関係を追加したことを確認するthis questionを見てください。

+0

重要な部分は、jackson-databindに依存関係を追加することです。 –

関連する問題