ユーザーの配列からJSONを返す@Restcontrollerを作成する方法

ジョナサン・リーブス:

私は今、しばらくの間、この課題を解決しようとしているのです。私は、JavaScriptの開発者ですが、春ブーツとJavaを実行しようとしていると問題に実行しています。以下のコードでは、私は書く方法を把握する必要があり@RestControllerUserクラスで下に作成したユーザーのリストからJSONを返すためのロジックを。私は、これは私にすべて新しいものであるため、ことをやって行くのかではないと確信しています。

package usersExample;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;

@RestController
public class UsersController {
    /* Please insert your code here to make the tests pass */
}

@Service
class UserService {
    public List<User> all() {
        List<User> users = new ArrayList<User>();
        users.add(new User("Bob"));
        users.add(new User("Christina"));
        users.add(new User("Steve"));
        return users;
    }
}

class User {
  private final String name;
  public User(String name) {
      this.name = name;
  }
  public String getName() {
      return name;
  }
}
セバスチャンI:

あなたが使用しているので@RestController、戻り値は、すでにあるJSON(それはすでにジャクソンライブラリが含まれているため、スプリングブーツは、追加の依存関係を追加することなく、変換を行います)。あなたは、単に戻りますあなたのコントローラのメソッドを作成することができList、ユーザのを。あなたのコードについての一つのコメントは:のように、適切なメソッド名を使用するfindAll()代わりにall()

@GetMapping("/find-all")
public List<User> findAll()
{
      return userService.findAll();
}

PSは:あなたが追加したコードは、あなたが実行している1と同じである場合には、私はあなたのために別のクラスを作成することをお勧めUserしてUserService

EDIT:JSONオブジェクトに単純なオブジェクトの変換は、ゲッターを使用して行われます。それはどのように働いていますか?のはあなたの例を見てみましょう:

class User {
  private final String name;
  public String getName() {
      return name;
  }
}

コンバータが始まるメソッドを探しますget:キーワードとセットのすべての最初の文字と属性名を小文字に変換して、属性のみ、この手段は、(あなたが唯一の1ゲッターを持っているので)、このようになりますことを後にname : -value here-

今、あなたは、のようないくつかの質問をすることができます。

1)

Q:あなたが変更した場合はどうなりgetName()方法はにgetname()

A:同じように動作します

2)

Q:あなたは、フィールドへのゲッターを提供しない場合はどうなりますか?

A:フィールドはJSONプロパティに変換されることはありません

3)

Q:あなたが変更した場合はどうなりgetName()に方法をgetMyName()

属性名は次のようになりますmyName: -value-

したがって、これらがされている場合は、あなたのJSONの構造を変更したい場合は、多くのソリューションがあり、言いました:

1)ゲッターの名前を変更します(実際にはお勧めしません)

2)@JsonPropertyアノテーションを使用してください。例えば:

private String name;

@JsonProperty("name")
public String thismethodwontworkwithoutjsonproperty() {
    return this.name;
}

3)DTOオブジェクトを作成UserDTOし、代わりにこれを返しますUserそして、あなたのコントローラであなたはuserDTOオブジェクトにユーザーを変換することができます。

public class UserDTO {
   private String fullName; 
   //getter; setter;
}

そして

public class User {
  private String firstName;
  private String lastName;
  //getter;setter;
}

そして最終的に、あなたはこのような変換を行います。

@GetMapping("/getUser")
public User returnUser() {
    User user = new User();
    user.setFirstName("Stack");
    user.setLastName("Overflow");
    UserDto userDto = convertUser(user);
    return userDto;
}

private UserDTO convertUser(User user) {
    UserDTO userDTO = new UserDTO();
    userDTO.setFullName(user.getFirstName() + " " + user.getLastName());
    return userDTO;
}

しかし、私はあなたのアプリケーションを構築して追加するようにお勧めしfacade作成するのではなく、この変換を行います層convertUser()コントローラのメソッドを。

出力:

{
  "fullName":"Stack Overflow";
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=14746&siteId=1