2015-01-17 2 views
4

Я работаю с примером из https://spring.io/guides/gs/rest-service/ и я изменил приветствие класса по умолчанию для моего класса и, когда я звоню это в веб-браузере http://localhost:8080/greeting я получаю ответ: There was an unexpected error (type=Not Acceptable, status=406). Could not find acceptable representationSpring Rest Service

Мой контроллер:

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 («rest») он по-прежнему дает ту же ошибку ...:( – 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

по-прежнему та же ошибка. Когда я использую класс приветствия (по умолчанию), он работает, поэтому я думаю, что он правильно сопоставлен. – 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.

Я думаю, вам нужно добавить геттеры/сеттеры или сделать некоторые атрибуты общедоступными, потому что Джексон, вероятно, запутался при сериализации вашего класса Customer.

+0

Попробуйте добавить публичные геттеры. Я, Брайан, прав. –

+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

Я нахожусь под впечатлением отсутствие добытчиками для ваших частных полей в Клиент может вызвать проблемы

Кроме того, у вас добавил зависимость JSON-пути в вашем pom.xml?

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

Вы используете Spring Boot? Если да, то ваш класс приложения должен быть аннотирован @SpringBootApplication. Это объединяет аннотации @EnableWebMvc, @Configuration, @ComponentScan и @EnableAutoConfiguration. Стекловатка была бы полезной, чтобы попытаться выяснить, в чем проблема.

Смежные вопросы