2015-01-17 173 views
4

我與例如工作從https://spring.io/guides/gs/rest-service/和我改變默認類的招呼我自己的類,當我打電話這在Web瀏覽器中http://localhost:8080/greeting我得到的答案: There was an unexpected error (type=Not Acceptable, status=406). Could not find acceptable representation彈簧安置服務

我的控制器:

package rest; 

import java.util.concurrent.atomic.AtomicLong; 

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

import database.*; 

@RestController 
public class GreetingController { 

    private static final String template = "Hello, %s!"; 
    private final AtomicLong counter = new AtomicLong(); 
    private DBAccess dbaccess= new DBAccess(); 

    @RequestMapping("/greeting") 
    public Customer greeting(@RequestParam(value="name", defaultValue="World") String name) { 
     return new Customer(1,"a","b"); 
    } 
} 

和客戶類:

package database; 

public class Customer { 
    private long id; 
    private String firstName, lastName; 

    public Customer(){}; 
    public Customer(long id, String firstName, String lastName) { 
     this.id = id; 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 


    void setFirstName(String firstName){ 
     this.firstName=firstName; 
    } 

    void setLastName(String lastName){ 
     this.lastName=lastName; 
    } 


    @Override 
    public String toString() { 
     return String.format(
       "Customer[id=%d, firstName='%s', lastName='%s']", 
       id, firstName, lastName); 
    } 
} 

以下Spring MVC Rest/JSON service我加了傑克遜映射器的依賴,但它不工作...

請幫我

根據星雲評論。 我沒有web.xml,我使用https://spring.io/guides/gs/rest-service/的例子,並沒有任何。

這裏是我的Application.class

package rest; 

import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.boot.SpringApplication; 
import org.springframework.context.annotation.ComponentScan; 

@ComponentScan 
@EnableAutoConfiguration 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 
+0

你有'web.xml'嗎?也沒有提供用於組件掃描的軟件包。應該像'@ComponentScan(「rest」)',如果rest是你的基礎包。 – nebula

+0

不,我沒有web.xml。更改爲@ComponentScan(「休息」)後,它仍然給出相同的錯誤...( – Bartek

+0

)如果你沒有web.xml,那麼應該有一個實現了'WebApplicationInitializer'的類。你有這樣的類嗎? – nebula

回答

0

嘗試定義方法和響應類型。

@RequestMapping(value = "/greeting", method = RequestMethod.GET, 
produces = "application/json; charset=utf-8") 
@ResponseBody 
public Customer greeting(@RequestParam(value="name", defaultValue="World") String name) { 

還要確保它被正確映射爲http://localhost:8080/greeting

+0

仍然是一樣的錯誤。當我使用Greeting類(默認)時,它工作,所以我認爲它的映射正確 – Bartek

+0

你可以用'web.xml'或應用程序配置類來更新你的問題嗎? – nebula

0

你必須使用@ResponseBody註釋爲您greeting方法如下

@RequestMapping("/greeting") 
public @ResponseBody Customer greeting(@RequestParam(value="name", defaultValue="World") String name) { 
    return new Customer(1,"a","b"); 
} 

它是用於對象序列化。它會嘗試轉換返回值(客戶對象)並自動將其寫入http響應。

+0

仍然是相同的錯誤 – Bartek

+2

它已經是'@ RestController',不需要添加'@ ResponseBody' –

1

您可能有一個JsonMappingException。

我認爲您需要添加getters/setters或公開某些屬性,因爲在序列化您的Customer類時Jackson可能會感到困惑。

+0

試試這個,添加公共getter。我的事情布萊恩是對的。 –

+0

這對我有用。我有同樣的錯誤 –

-1

更改

public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
} 

public static void main(String[] args) { 
     SpringApplication.run(GreetingController.class, args); 
    } 
+1

這只是錯誤的 –

+0

嗯是的,我錯了 – jona

0

我的印象是缺乏干將爲您的客戶你的私人領域可能造成的麻煩

此外,有你加入您的pom.xml中的JSON路徑依賴關係?

<dependency> 
     <groupId>com.jayway.jsonpath</groupId> 
     <artifactId>json-path</artifactId> 
     <scope>test</scope> 
</dependency> 
0

您是否使用Spring Boot?如果你是,你的應用程序類應該註釋爲@SpringBootApplication。這捆綁了@EnableWebMvc,@Configuration,@ComponentScan@EnableAutoConfiguration註釋。一個堆棧跟蹤將有助於試圖找出究竟是什麼問題。